【问题标题】:Running a function multiple times generates "accumulated" output [duplicate]多次运行一个函数会生成“累积”输出[重复]
【发布时间】: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 &lt;- in_a 你正在制作data.table 的副本,我认为它会修改它,即使这应该是本地的。
  • 您使用:=,“引用分配”。 .. 你每次运行都会改变你的 dt_b 对象...

标签: r data.table


【解决方案1】:

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

this question 对此进行了广泛的解释。

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多