【发布时间】:2013-05-14 19:41:36
【问题描述】:
当将项目返回到data.table 时,如果它们自动采用变量的名称会很好。如何做到这一点?这就是我的意思:
require(data.table)
x = data.table(a=1:10, id=1:2)
x[,{s = sum(a); p=prod(a); y = sqrt(abs(s*p)); z = y+1; list(y, z)},by=id]
# id V1 V2
#1: 1 25 945
#2: 2 30 3840
如果将列标记为s 和p,而不是V1 和V2,那就太好了。在这里做这件事没什么大不了的,但是如果你有 20 列,那就真的很痛苦了。关于如何做到这一点的任何想法?
编辑:我更改了问题以明确为什么我不只是做 list(name = value)
【问题讨论】:
-
哦,看来是相关的。我猜FR仍然开放?有没有办法在 R 中更简洁地执行此操作,然后执行
list(x=x, y=y, z=z)。我知道这不是data.table的事情,但是在 R 中生成这个表达式而不是手动生成这个表达式的最快方法是什么? -
Hrm,看起来@GSee 用link 删除了该评论。反正我也很好奇这个。
-
是的,我删除了评论,因为我认为这是一个不同的功能请求。
-
正如@Justin 和其他人所提到的,解决方案只是命名列表的元素。这是
base R的东西,与data.table没什么关系。话虽如此,我当然可以看到自动化名称的好处。但是,我发现了很多陷阱和极端情况。一个可靠的解决方案是什么样的?可靠我的意思是“在所有情况下都可以预测”。目前,可以实现DT[, list(mean(x), sd(x))]$V1并确定这将返回mean(x)。如果存在极端情况,则会牺牲确定性。 -
@RicardoSaporta 是的,所以也许有这样的选择,
dt[,list(...),makeNames=TRUE]。
标签: r list data.table named columnname