我有两个数据表,我把它们放在了一个函数中。我使用:=重新分配了一个列的值,但是它改变了该函数和全局环境中该列的值(参见代码)。
library(data.table)
# Example data
dt1 <- data.table(letters=letters[1:6],
value=1:6 + 0.0)
dt2 <- data.table(letters=c("b", "e"),
value=rnorm(2))
# Define a function so we perform := in separate environment
f <- function(df1, df2) {
df1[df2, on="letters", value:=value-i.value]
}
# Run the function
f(dt1, dt2)
# Surprised to find it's updated dt1's value column
# despite dt1 being in a different environment
dt1是否有一种方法可以让:=只在它正在使用的环境中分配?或者至少不会影响我工作的环境..。
发布于 2020-05-26 10:41:45
在通过引用修改对象之前,我们可以在函数的主体中对对象进行copy:
f <- function(df1, df2) {
copy(df1)[df2, on="letters", value:=value-i.value]
}https://stackoverflow.com/questions/62018780
复制相似问题