运行 函数多次生成 "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.table
s 不复制数据,只是对 data.table 的引用。 tmp[, value := Va/in_b$Vb]
因此更改了 in_a
中的数据。
这在 this question 中有详细解释。
我定义了一个函数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.table
s 不复制数据,只是对 data.table 的引用。 tmp[, value := Va/in_b$Vb]
因此更改了 in_a
中的数据。
这在 this question 中有详细解释。