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 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 应该工作的方式?

最佳答案

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

关于r - data.table 内部的环境如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24958363/

相关文章:

javascript - 单击 Shiny 数据表中的按钮后如何滚动到底部

r - 基于 R 中的另一个向量创建一个向量?

R/数据表 : separate columns and count occurrences

r - 为数据表的多列分配唯一 ID

r - 根据唯一列项的计数创建 3 级指示变量

r - 如何同时提取列表的不同元素

r - 如何让 org-mode 导出宽或长表以便在 PDF 中可读?

java - 加载 rJava 时出错

r - 使用 `car` 跨列范围重新编码

r - data.table:为什么不能总是总是直接传递列名?