r - R中data.table中的.SD列

标签 r data.table

当编写一些在 j 中操作的表达式时在 data.table , .SD不包含表中的所有列,而只包含表达式使用的列。这对于运行东西来说很好,但对于调试来说并不好。查看所有列的最佳方式是什么?我可以把所有的名字传给.SDcols但这似乎相当乏味。前任:

x = data.table(a=1:10, b=10:1, id=1:5)
x[,{ browser(); a+1},by=id]
Called from: `[.data.table`(x, , {
    browser()
    a + 1
}, by = id)
Browse[1]> n
debug at #1: a + 1
Browse[1]> .SD
   a
1: 1
2: 6

最佳答案

使所有.SD的列可用,您只需要在 j 中的某处引用它表达。例如,试试这个:

x[,{.SD; browser(); a+1},by=id]
# Called from: `[.data.table`(x, , {
#     .SD
#     browser()
#     a + 1
# }, by = id)
Browse[1]> .SD
#    a  b
# 1: 1 10
# 2: 6  5

这是有效的,因为,as explained here

[.data.table() [...] previews the unevaluated j expression, and only adds to .SD columns that are referenced therein. If .SD itself is mentioned, it adds all of DT's columns.



或者,如果您不想承担加载费用 .SD每个按组计算的列,您始终可以检查 x 当前加载的子集调用 x[.I,] . ( .I 是一个变量,用于存储当前组的 x 中的行位置):
x[,{browser(); a+1},by=id]
# Called from: `[.data.table`(x, , {
#     browser()
#     a + 1
# }, by = id)
Browse[1]> x[.I,]
#    a  b id
# 1: 1 10  1
# 2: 6  5  1

关于r - R中data.table中的.SD列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16572463/

相关文章:

r - dplyr:按学校分组的因素的计数/百分比未分组

r - 如何使用 R 包 purrr 中的函数重现循环

r - 计算 data.table 中每个组的行本身之前的唯一值

r - 下一个出现的记录的索引

r - 返回 j 中的命名列表时,data.table 中的内存泄漏缓慢(尝试 reshape data.table)

r - 如何在r中使用多个响应组合重新编码分类变量?

r - 增加情节刻度线的长度

json - 使用jsonlite包解析JSON文件时出错

R数据合并而不复制

r - knitr 被 data.table `:=` 赋值欺骗