【发布时间】:2021-12-23 20:04:19
【问题描述】:
我定义了一个函数try_1,其目的是根据两个输入数据集计算输出。
library(data.table)
# the function
try_1 <- function(in_a, in_b){
in_b[, `:=`(Vb = Vb/1000)]
tmp <- in_a
tmp[, value := Va/in_b$Vb]
return(tmp)
}
dt_a <- data.table(Va = c(2, 5))
dt_b <- data.table(Vb = c(1000, 2000))
# run for the 1st time
dt <- try_1(dt_a, dt_b)
# run for the 2nd time
dt <- try_1(dt_a, dt_b)
# run for the 3rd time
dt <- try_1(dt_a, dt_b)
如果我只运行该函数一次,则输出 dt 符合预期,即
Va value
1: 2 2.0
2: 5 2.5
但是,如果我在 秒 次运行它,dt 会发生变化! (我认为它应该和第一次运行一样,因为句子没有改变)。 value 大 1000 倍。
Va value
1: 2 2000
2: 5 2500
如果我进一步运行第三次次,dt 将再次发生变化:
Va value
1: 2 2000000
2: 5 2500000
谁能告诉我是什么导致了这个问题?为什么多次运行会出现不同的结果?
【问题讨论】:
-
我怀疑它与这一行有关:
tmp <- in_a你正在制作data.table的副本,我认为它会修改它,即使这应该是本地的。 -
您使用
:=,“引用分配”。 .. 你每次运行都会改变你的 dt_b 对象...
标签: r data.table