Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 环境如何在data.table中工作?_R_Data.table - Fatal编程技术网

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

R 环境如何在data.table中工作?,r,data.table,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

在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
mtcars mpg气缸显示hp drat wt qsec与am齿轮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 f mtcars[,f(),by=档位] [1] “Cfastmean”“齿轮”“表示”“打印” [1] “Cfastmean”“齿轮”“表示”“打印” [1] “Cfastmean”“齿轮”“表示”“打印” 齿轮V1 1: 4 1 2: 3 1 3: 5 1
我希望
print(ls(e))
调用将打印mpg、cyl、disp、hp等。。但事实并非如此。这里有错误吗?或者这不是data.table的工作方式?

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