与之前的question类似,我想通过一个函数调用向data.table添加多个列。但是,我的函数并不只是返回一个数字,如mean(),而是整个向量,如scale()或cat()。有谁知道怎么做?
以下工作没有问题:
library(data.table)
x <- data.table(a=1:3,b=1:6)
f <- function(b) {
d = mean(b) * 2
list("hi", "hello",d)
}
x[,c("col1","col2","col3"):=f(b), by=a][]
但是当我用我的函数替换平均值时,例如scale(),我得到一个错误和一个友好的建议,但我不知道该怎么做:
x <- data.table(a=1:3,b=1:6)
f <- function(b) {
d = scale(b) * 2
list("hi", "hello",d)
}
x[,c("col1","col2","col3"):=f(b), by=a][]
`[.data.table`(x, , `:=`(c("col1", "col2", "col3"), f(b)), by = a)
中的错误:j = list(...)中的所有项目都应该是原子矢量或列表。如果你正在尝试类似j = list(.SD,newcol = mean(colA))的东西,那么使用:= by group(更快),或者cbind或者之后合并。