6

data.tablesしたいことがいくつかありrbindlistます。表には、(欠落している可能性がある) 水準を持つ因子が含まれています。次に、rbindlist(...)とは異なる動作をしdo.call(rbind(...))ます。

dt1 <- data.table(x=factor(c("a", "b"), levels=letters))

rbindlist(list(dt1, dt1))[,x] 
## [1] a b a b
## Levels: a b

do.call(rbind, list(dt1, dt1))[,x]
## [1] a b a b
## Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z

レベルを維持したい場合、頼らなければなりませんかrbind、それとも方法はありdata.tableますか?

4

2 に答える 2

4

rbindlistのチェックを行わないため、より高速だと思いますdo.call(rbind.data.frame,...)

バインド後にレベルを設定しないのはなぜですか?

    Dt <- rbindlist(list(dt1, dt1)) 
    setattr(Dt$x,"levels",letters)  ## set attribute without a copy

から?setattr:

setattr() は、参照によって属性を設定する多くの状況で役立ち、data.tables だけでなく、任意のオブジェクトまたはオブジェクトの一部で使用できます。

于 2013-10-18T14:08:17.113 に答える