2015-01-01から1年間の記事一覧

なぜクソ仕様が生まれたのか

ひとりアドベントカレンダー24日目。 Rだとこんなことができる。 > "ggplot2" <- "dplyr" > ggplot2 [1] "dplyr" > "ggplot2" [1] "ggplot2" こんなことができるがゆえにHadley Wickhamなどはlibrary(ggplot2)と書かずにlibrary("ggplot2")と書くことを勧め…

Rのdeep copy問題の一部はずいぶん前に解決されていた

ひとりアドベントカレンダー23日目。 いつものようにAdvanced Rを読んでいると、次のような一節があった。 (あ、来月に翻訳が出ます。)R言語徹底解説作者: Hadley Wickham,石田基広,市川太祐,高柳慎一,福島真太朗出版社/メーカー: 共立出版発売日: 2016/02…

timecardパッケージをRStudioのアドインにした

ひとりアドベントカレンダー22日目。1億総シリパク(シリアルパッケージクリエーター)時代を迎え、自作パッケージを持っていないほうを見つける方が難しくなりました。 そんな自作パッケージの関数をRStudioのメニューからアドインの形で呼び出せるように…

大事なことなので何度でも言う

ひとりアドベントカレンダー21日目。 前処理などしてるとき、キーボードをッターン!!!!と叩きながら奇声をあげてテンションを高めている人は多いと思います。 個人の奇声に任せずにRの環境としてそれをサポートできないか。 そんな想いのもと、かつてpingsパ…

Rはコピーするという話

ひとりアドベントカレンダー20日目。 Rからプログラミングの世界に入った人は他言語で似たようなライブラリを扱った時に混乱する可能性がある。 たとえば以下の挙動はRユーザにとってはなんら不自然なものではない。 > x1 <- 0:9 > x2 <- x1[seq(0,9,by=2)] …

Rで寿司サイコロを作りたい

ひとりアドベントカレンダー19日目。 Rで寿司サイコロを作りたいとする。 sample関数を使って一旦寿司に格納すると以下のように値は固定されたままとなる。 で、固定されないようにする方法がありpryrパッケージの %

フォースの力に頼らない

ひとりアドベントカレンダー18日目。 Advanced RにもあるようにRは遅延評価を導入しているため、思ってたのんと違うわこれという動作がたまにある。 例えばlapply関数の挙動。 > add <- function(x) { + function(y) x + y + } > adders <- lapply(1:10, add…

juliaの特徴をRユーザの視点から眺める

juliaアドベントカレンダー17日目です。Rの仕様書を読む前に読んでおきたいAdvanced Rの翻訳が来月出るという話はもう16回くらいしてきた。R言語徹底解説作者: Hadley Wickham,石田基広,市川太祐,高柳慎一,福島真太朗出版社/メーカー: 共立出版発売日: 2016/…

reshape関数とtidyrの関係

ひとりアドベントカレンダー16日目。 こういうデータセットがあったとする。 > (smp <- data.frame(ID=rep(1:3, 2), + BMI=rep(c(21,26),3), + sbp=rep(c(150,120),3), + nendo=rep(2008:2009, 3) + ) + ) ID BMI sbp nendo 1 1 21 150 2008 2 2 26 120 2009…

[とsapplyには気をつける。

ひとりアドベントカレンダー15日目。 Rはよしなにデータを処理してくれるので、非常に使い勝手が良い。 その一方、よしなに処理しすぎてこちらが泣きをみることがある。 たとえば、Rで使わない人はいないであろう[関数。 data.frameクラスに適用される[.da…

Rでサダメトリクス

ひとりアドベントカレンダーおよびさだまさし×ITアドベントカレンダー14日目。 本記事ではサダメトリクスに取り組みます さだまさし×ITアドベントカレンダーは一見色物のようなタイトルでありながら非常にレベルの高いアドベントカレンダーです。 多くの人が…

do.call関数の使いみち

ひとりアドベントカレンダー13日目。 引数リストを関数に渡して実行したい時、そんな時にdo.call関数を使います。 do.call("mean", list(1:10, na.rm = TRUE)) 誤解されているようですが、このdo.call関数の第1引数は文字列でなくてもOKです。 # 上の例と同…

Rでタイムカード

ひとりアドベントカレンダー12日目。 こんな話がRワカラングに投稿されていた。 WakaTime https://wakatime.com という、テキストエディタなどでの作業時間を記録してくれるウェブサービスが面白そうで、なんとRStudioも候補にあるのですが、投票数が少なく…

バックティックの使いみち

ひとりアドベントカレンダー11日目。 Rにおいて原則として数字や記号から始まる変数名は使えません。 これはデータフレームにおける列名においても同様です。 > data.frame(1var="q") エラー: 想定外のシンボルです in "data.frame(1var" しかし、事情があり…

想いをオブジェクトに込める

ひとりアドベントカレンダー10日目。 あまり知られていないようですが、Rでcomment関数を使うとオブジェクトにコメントがつけられます。 comment(iris) <- "好きです" comment(iris) [1] "好きです" これはRの属性(attributes)を利用しています。 通常、属性…

rstanの結果も整形して描画する

ひとりアドベントカレンダー9日目です。 昨日と同じ話をrstanでもやってみます。 昨日の例は以下のようなロジスティック回帰でした。 res_glm <- glm(data=MASS::birthwt, low~age+smoke, family="binomial") ですがStanのコードを書きたくない。 ということ…

DiagrammeRを使ってモデルを可視化する

以前ロジスティック回帰の結果を整形して表示するという記事を書きました。 今回は整形した結果をDiagrammeRを用いて可視化してみます。 まずはモデルを作ります。前回と同じロジスティック回帰のモデルです。 > res_glm <- glm(data=MASS::birthwt, low~age…

Rの<-はAPLの名残り

ひとりアドベントカレンダー7日目。 data.table型に対してcolnamesなどを適用すると下のような警告が出る。 > library("data.table") > smp <- as.data.table(iris) > colnames(smp) <- colnames(smp) 警告メッセージ: In `names<-.data.table`(`*tmp*`, va…

整形した結果を表示する

ひとりアドベントカレンダー6日目。 glm使ってオッズ比を算出しながら、あーこの辺自動的にやってくれるパッケージあったなと思いだした。 epiCalcというパッケージで、該当関数はlogistic.display。 が、CRANからリムーブされていた。 https://cran.r-proj…

ロードしているパッケージをインストールする

ひとりアドベントカレンダー5日目。 ロードしているパッケージをインストールしようとするとエラーになる。 > library("ggplot2") > install.packages("ggplot2") Error in install.packages : Updating loaded packages こんな時は、パッケージをアンロー…

R界の仏

ひとりアドベントカレンダー4日目。 R界の神といえばHadley Wickham。 library("ggmap") ggimage(hadley) 彼が書いたのがAdvanced Rで、邦訳がもうすぐ出る。R言語徹底解説作者: Hadley Wickham,石田基広,市川太祐,高柳慎一,福島真太朗出版社/メーカー: 共…

ベクトルが[でリストが[[で

ひとりアドベントカレンダー3日目。 URLをスラッシュで分割し特定の要素を抽出したいとする。 文字列の分割は組み込み関数だとstr_split関数があるのでこれを使ってみる。 library("dplyr") > (dat <- data.frame(URL=c("http://notchained.hatenablog.com/…

名前付きベクトルの挙動

ひとりアドベントカレンダー2日目。 以下のコードの実行結果は皆さん予想できるだろうか。 x1 <- c(a=1, a=2, a=3, b=1, b=2, b=3) x2 <- c(a=1:3, b=4:6) 結果はこちら。 > x1 a a a b b b 1 2 3 1 2 3 > x2 a1 a2 a3 b1 b2 b3 1 2 3 4 5 6 今度はこちらの…

S3クラスの効用

わたし一般ユーザーやしRでクラスとか使わんわーよう使わんわーという人、多いと思います。 しかしS3クラスは便利です。 たとえばprint関数の挙動をみてみましょう。 以下はシンプルな因子をprintした例です。 > smp <- factor("a") > print(smp) [1] a Leve…

lapplyを使うときの豆知識

R

まあdplyrでmutate_each使えやって話になるかもしれないが、外部パッケージを読み込むのがめんどい、もしくは講義などで初心者に教えるのがめんどいときにlapplyを使わなければいけない、そんな場面、あると思います。 しかし、lapplyの結果はリストで返って…

expand.gridとas.data.frame.characterにおけるfactorへの変換挙動の違い

R

こんな話がある。 http://uribo.hatenablog.com/entry/2015/11/22/173837 まあ実装が違うんだろうということで、関数の中身をみてみると、expand.gridの中ではfactor関数でunique関数をかけてlevelsを指定しているのに対し、as.data.frameではlevelsを指定し…

文字コードを推測する関数はrvest::guess_encoding

R

文字コード問題つらい。 文字コードの推測法について、r-wakalangで質問したら色々と解決策を教えていただいた。 rvestパッケージを用いた方法をここでメモしておく。 ちなみにguess_encoding関数はstringiパッケージのstri_enc_detect関数のラッパーである…

自分を煽るパッケージを作りました

R

勤勉な人は朝が早い。スタバ<GO>— ホクソタワマン (@teramonagi) 2015, 11月 13 こういうのを見ると俺もがんばらなければと思う。しかし俺の場合、twitterを見ると生活がだらける。 朝一では見ないようにしたい。 ということで朝3〜8時の間で勤勉な人の活動開</go>…

記号を含む列名の選択には爆竹を使う

R

こういうデータフレームがあるとする。 > (smp <- data.frame(`hoge(hage)`=1, fuga=2, check.names=FALSE)) hoge(hage) fuga 1 1 2 read.csv等を使ってデータを読み込んで、check.names=FALSEなどにしていない限り、列名の()などは.に変換される。 しかし、…

ggplot2で軸の書式設定をする際、文字列で指定するな俺

書式設定はたまにしか使わないのでうっかり文字列でlabels="comma"のように指定してしまう。 そして、よくわからないエラーが出て混乱する。 慌てるな、文字列じゃなくてlabels=commaのように指定すればいいだけなんだ。 > library("ggplot2") > library("sc…