:= 在多个环境中分配
:= assigning in multiple environments
我有两个数据表,我将它们加入了一个函数。我使用 :=
重新分配一列的值,但它会在该函数和全局环境中更改该列的值(参见代码)
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
有没有办法让 :=
只在使用它的环境中赋值?或者至少不会影响我工作的环境...
我们可以copy
函数体中的对象,在通过引用修改它之前:
f <- function(df1, df2) {
copy(df1)[df2, on="letters", value:=value-i.value]
}
我有两个数据表,我将它们加入了一个函数。我使用 :=
重新分配一列的值,但它会在该函数和全局环境中更改该列的值(参见代码)
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
有没有办法让 :=
只在使用它的环境中赋值?或者至少不会影响我工作的环境...
我们可以copy
函数体中的对象,在通过引用修改它之前:
f <- function(df1, df2) {
copy(df1)[df2, on="letters", value:=value-i.value]
}