裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

named vector の活用

2014年07月14日 | ブログラミング

http://d.hatena.ne.jp/a_bicky/20140713/1405211663
R の named vector から subset を得る際の最悪計算量は O(n^2)

の前半部分で,データフレームの factor 列の情報に基づき新たな列を算出するのに,names を使うと速いよと書いてあった。

> nrow(students)
[1] 3000000
> class(students$grade)
[1] "factor"
> levels(students$grade)
[1] "可"   "不可" "優"   "良"  
> scores
  優   良   可 不可
  30   20   10    0

という状況で,students$grade が,優,良,可,不可 のとき,students$score が 30, 20, 10, 0 となるようにするということ。

> system.time(students$score <- scores[students$grade])
   ユーザ   システム       経過  
     0.087      0.002      0.089 


今まで,私なら,以下のようにしていた。

> system.time(students$score2 <- c(10, 0 , 30, 20)[as.integer(students$grade)])
   ユーザ   システム       経過  
     0.039      0.001      0.039


c(10, 0 , 30, 20) の順序は levels(students$grade) の順序に依存しているので,並び方がおかしいのはこのやりかたのせいではない。

倍速になったとはいっても,300 万行においてなので,意味のある差ではない。

scores[students$grade] の方がわかりやすいであろう。

コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 素数の個数 | トップ | 学術用語 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事