使用 data.table 版本 1.8.8。为什么这有效:
dat <- data.table(a=1:5,b=5:1)
sdat <- dat[,lapply(.SD,function(x) x*b)]
但是这个
dat <- data.table(a=1:5,b=5:1)
f <- function(x) x*b
sdat <- dat[,lapply(.SD,f)]
给出
Error in FUN(X[[1L]], ...) : object 'b' not found
我缺少什么吗?
最佳答案
我不太认为这是一个错误 - 当您调用 f
时,a
和 b
会作为 向量
称为x
。 (更准确地说,正在传递 .SD
)
因此,虽然 a
和 b
存在于 j
中,但函数 f
的主体不会在j
.
为了说明这一点,看看运行时会发生什么
with(dat, f(a))
我建议仅将 b
作为函数的参数,以避免依赖名称一致性。
f = function(x,b) x * b
dat[,sapply(.SD, f, b=b)]
关于r - .SD lapply 可能存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18875445/