最近、パッケージ紹介といえばからだにいいものさんの活躍っぷりがすごいので、私はもうこういうの書かなくていいかなあ...なんて思いながら羽鳥がなんかつぶやいてたのでdplyrの次期バージョンを軽く触ってみて気になるとこだけメモしときます。
dplyr is schedule for submission to CRAN on Monday! Lots of bug fixes and a few neat little features. #rstats
— Hadley Wickham (@hadleywickham) August 27, 2015
参考
元のNEWSファイルはここ。
dplyr/NEWS.md at master · hadley/dplyr · GitHub
文字コードまわりの改善
Until now, dplyr's support for non-UTF8 encodings has been rather shaky. This release brings a number of improvement to fix these problems: it's probably not perfect, but should be a lot better than the previously version.
ということで、文字コード周りの細かなバグがちょこちょこ直っているらしいです。これでかの有名なWhy Are You Using SJIS問題にも終止符が打たれるのかも??(いや、元の問題を理解できてないので全然わかりません…すみません)。
それはそれとして、↓これとかはロケールによっては文字の順番が一意に定まらないという問題らしいんですが、なんとなく深い闇を垣間見ている気がします。コワイ。
Unicode numbers · Issue #1315 · hadley/dplyr · GitHub
frame_data()
add 'frame_data() (#804) by kevinushey · Pull Request #1358 · hadley/dplyr · GitHub
たぶん今回追加された関数はこれだけ? 行方向にデータフレームをつくる関数らしいです。あんまり使うことはなさそう。
frame_data( ~colA, ~colB, "a", 1, "b", 2 ) #> Source: local data frame [2 x 2] #> #> colA colB #> (chr) (dbl) #> 1 a 1 #> 2 b 2
そうそう、この(chr)
とか(dbp)
とか、列のデータ型が表示されるようになりましたね。これも細かな改善。
added option `show_classes` for `print.tbl_df` by w9 · Pull Request #1276 · hadley/dplyr · GitHub
bind_rows()
、bind_cols()
がlistにも使えるようになった
bind_rows(): accept lists? · Issue #1104 · hadley/dplyr · GitHub
これまで、bind_rows()
に渡すのはいったんdata.frame
に変換してからでないとダメでしたが、listをそのまま渡しても大丈夫になりました。
list(list(x = 1, y = 'a'), list(x = 2, y = 'b')) %>% bind_rows #> Source: local data frame [2 x 2] #> #> x y #> (dbl) (chr) #> 1 1 a #> 2 2 b
bind_rows()
に.id
を指定できるようになった
Add .id argument to bind_rows by lionel- · Pull Request #825 · hadley/dplyr · GitHub
これまで、bind_rows()
をすると、それぞれの列がどのオブジェクトから来たか、という情報が完全に失われてしまっていました。
つまり、
type_A <- data.frame(value = c(1,2,3), error = c(0.1, 0.2, 0.1)) type_B <- data.frame(value = c(2,2,4), error = c(0.4, 0.4, 0.1))
みたいなデータがあるときに、ふつうにbind_rows()
すると、どれがtype Aだかtype Bだか分からなくなってしまっていました。
bind_rows(type_A, type_B) #> Source: local data frame [6 x 2] #> #> value error #> (dbl) (dbl) #> 1 1 0.1 #> 2 2 0.2 #> 3 3 0.1 #> 4 2 0.4 #> 5 2 0.4 #> 6 4 0.1
これが、.id
引数を指定すると、区別することができるようになります。書き方は何種類かあります。
bind_rows(type_A, type_B, .id = "id") #> Source: local data frame [6 x 3] #> #> id value error #> (chr) (dbl) (dbl) #> 1 1 1 0.1 #> 2 1 2 0.2 #> 3 1 3 0.1 #> 4 2 2 0.4 #> 5 2 2 0.4 #> 6 2 4 0.1 bind_rows(A = type_A, B = type_B, .id = "type") #> Source: local data frame [6 x 3] #> #> type value error #> (chr) (dbl) (dbl) #> 1 A 1 0.1 #> 2 A 2 0.2 #> 3 A 3 0.1 #> 4 B 2 0.4 #> 5 B 2 0.4 #> 6 B 4 0.1
hybrid evaluation
summarize dropping attributes of columns · Issue #1237 · hadley/dplyr · GitHub
[BUG?] filter() throws error after group_by() %>% do() · Issue #1134 · hadley/dplyr · GitHub
なんすかそれ。しらない…。
と思ってぐぐると、6月ごろにこんなVignetteができていました。そういえばちらっと読んでまったく理解できずにスルーした記憶がおぼろげに…
https://cran.r-project.org/web/packages/dplyr/vignettes/hybrid-evaluation.html
どなたか解説記事よろしくお願いします!(丸投げ)
感想
引き続きバグフィックスという印象ですが、文字コードとかリスト周りの改善にはちょっと希望が持てる感じです。バージョン0.5が待ち遠しいです。