运行 函数多次生成 "accumulated" 输出

Running a function multiple times generates "accumulated" output

我定义了一个函数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

谁能告诉我这个问题是什么原因造成的?为什么在多个 运行 下会出现不同的结果?

data.tables 不复制数据,只是对 data.table 的引用。 tmp[, value := Va/in_b$Vb] 因此更改了 in_a 中的数据。

这在 this question 中有详细解释。