【发布时间】:2025-12-13 23:40:01
【问题描述】:
几个小时以来,我一直在努力完成以下任务:
我有一个数据表:
dt1 <- data.table(a = c(1:4), b = c(2:5), c= c(5:8))
还有一个功能:
myfun <- function(a, b, c) {
r <- 30
dt2 <- data.table(temp_int = seq(-10,50, by = 0.05))
dt2[, d := a * temp_int]
dt2[, e := b / temp_int]
dt2[, f := c + temp_int]
dt2[, g := d - e - f]
# return row where g nearest to 0
dt2[g == min(abs(g)), ]
}
如果我用测试值测试函数,一切都很好,我会得到一个合理且预期的答案。
但是当我尝试如下调用函数时:
dt1[, c('d','e','f','g') := myfun(a,b,c)]
我收到如下错误消息:
In addition: Warning messages:
1: In a * temp_int :
longer object length is not a multiple of shorter object length
2: In b/temp_int :
longer object length is not a multiple of shorter object length
数据表如下:
> dt1
a b c d e f g
1: 1 2 5 -0.5 -1.5 -8 6.5
2: 2 3 6 -0.5 -1.5 -8 6.5
3: 3 4 7 -0.5 -1.5 -8 6.5
4: 4 5 8 -0.5 -1.5 -8 6.5
所以基本上每一行都填充了相同的结果(从第一次计算开始)。我很难理解这个问题。我必须在返回之前从数据表中转换结果吗?
【问题讨论】:
-
您将 a、b、c 值的向量传递给函数。如果传递向量,则测试函数在 data.table 之外返回的内容。
-
感谢您的评论。在那之后,睡个好觉,我终于知道我哪里出错了。
标签: r function data.table