r - .SD lapply 可能存在错误?

标签 r data.table

使用 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 时,ab 会作为 向量称为x。 (更准确地说,正在传递 .SD)

因此,虽然 ab 存在于 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/

相关文章:

r - 使用 dplyr 创建一个按组规范化的新列

r - 创建包含数据集和使用数据的 R 函数的 R 包

r - 根据 R 中的前一行在序列中分配值

R data.table 简单替换整行

R数据.表: how to refer to current object in a chain?

r - 从该数据帧中的每个记录时间戳计算一秒窗口中出现多少数据帧记录时间戳的优化

r - 尝试在 dygraphs 中绘制每周 ts 对象时无法将索引转换为适当的类型

regex - R 用于非常大的字符串的更快的 gregexpr

html - 使用 for 循环或 lapply 将 Web 抓取到具有相似 URL 的 R 多个链接

r - 在 R 中与 data.table 分组时保留空组