环境如何在data.table中工作?

时间:2014-07-25 14:43:26

标签: r data.table

在data.table中,我希望使用by =进行子集化,然后访问包含相应列向量的环境。但是,它看起来并没有正常工作。

> mtcars
     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
 1: 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
 2: 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
 3: 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
 4: 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
 5: 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
    .
    .
    .

> mtcars <- data.table(mtcars)
> f<-function(e=parent.frame()) {print(ls(e)); 1}
> mtcars[, f(), by=gear]
[1] "Cfastmean" "gear"      "mean"      "print"
[1] "Cfastmean" "gear"      "mean"      "print"
[1] "Cfastmean" "gear"      "mean"      "print"
   gear V1
1:    4  1
2:    3  1
3:    5  1

我希望print(ls(e))调用会打印出mpg,cyl,disp,hp等等。但它并没有。这里是否有错误或者这不是data.table应该如何工作的?

1 个答案:

答案 0 :(得分:2)

data.table的效率技巧之一是仅将这些列放在实际使用的环境中,并且您只使用gear列。

与:比较:

mtcars[, {.SD; f()}, by = gear]
# [1] "am"        "carb"      "Cfastmean" "cyl"       "disp"      "drat"      "gear"
#     "hp"        "mean"      "mpg"      
# [11] "print"     "qsec"      "vs"        "wt" 
# ...

所有列都在环境中,因为我使用了.SD