【发布时间】:2022-01-17 09:57:38
【问题描述】:
我正在data.table 中按组计算操作,其中函数返回每个组的长度相同且名称相同的列表。但是,如果生成的列表的名称并不总是按组的顺序排列,那么最终输出中的值可能会被错误地分配。
这是一个人为的例子来说明这种行为:
f <- function(x, allcols){
l <- floor(log2(length(x)))
y <- c(1:l, l)
names(y) <- paste0(c(rep("n",length(y)-1),"s"), y)
y[setdiff(allcols, names(y))] <- 0
return(as.list(y))
}
d <- data.table(x = rep(1,30), group = c(rep(1,14), rep(2,16)))
allcols <- c(paste0("n",1:4), paste0("s",3:4))
x1 <- d[group==1,x]
x2 <- d[group==2,x]
f(x1,allcols)
f(x2,allcols)
d[, f(x, allcols), by = group]
您可以看到,单独对组运行时产生的输出与使用 data.table 作为分组操作完成时获得的输出不同。这可能是一个非常具体的用例,但在某些情况下这似乎会产生不正确的输出。这是故意的吗?在这种情况下,避免这种行为的最佳方法是什么?
【问题讨论】:
标签: r data.table