gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:46:38 24 4
gpt4 key购买 nike

当编写一些在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com