r - 在 R 中分配 data.table 切片

标签 r data.table

为了读取 data.table 切片,我可以使用以下语法:

foo = DT[, 5:10, with=F]

但现在我想做:
foo = foo + 1
DT[, 5:10, with=F] = foo

这不起作用;按名称引用列似乎也不起作用。有什么建议?

最佳答案

它更微妙一些。这就是我如何阅读您的问题以及您目前正在尝试如何做...

您的第一行创建了一个新的 data.table具有 6 列列子集的对象:

foo = DT[, 5:10, with=F]

我立即想到了内存影响。如果每列是 1GB,那就是您刚刚分配的 6GB 新对象。

然后你 +1 到 6GB 中的所有内容:
foo = foo + 1   # or something like that, that works

这是 6GB 到另一个新 6GB 的副本。

然后你复制 6GB foo回到原来的位置 DT首先:
DT[, 5:10, with=F] = foo    # or something like that, that works

那真的是内存效率低下。这是一种基本的 R 做事方式。

data.table你可以循环,你可以 set .我只会在一个易于阅读和易于理解的循环中完成它。
for (col in 5:10)
    set(DT, j=col, value=DT[[col]]+1)

这将通过引用一一更改每一列。 DT[[col]]不复制列内容(在 data.table 中没有什么特别之处,这是不复制的基础 R)。但是+1确实创建了一个新向量。然而,这个新向量然后被直接插入到列指针槽中,所以它的效率与+1 一样有效。返回一个新对象。

关于r - 在 R 中分配 data.table 切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100883/

相关文章:

r - 两个数据帧之间的传输因子属性

r - 如何使用 knitr/rmarkdown 自定义图形 LaTeX

r - 第二列的 data.table 索引

r - 加快插值练习

r - 如何绘制用一种缩放颜色着色的饼图并使用 plotly 包

C++ 或 Rcpp : comparison of two vectors without loop

r - 提取 ( ) 和 % 符号之前的所有值

大数据分组的 R 引导统计

regex - 通过 data.table 循环 grepl() (R)

r - 在 R 的另一个函数中使用 data.table