假设我有一个数据帧df
和一个列表obj
。
df<- data.frame(x=c(1, 2, 3, 4),
y=c(1, 2, 3, 4))
obj <- list(data.frame(z=c(0, 0, 0, 0),
a=c(0, 0, 0, 0)),
data.frame(b=c(0, 0, 0, 0)))
我创建了一个函数myFun
,该函数修改df
中的一列并将其添加到列表中obj
。如何在全局环境中更新x
和o
?换句话说,我如何让功能更新df
和obj
?
myFun <- function(x, o) {
x[1] <- x[,1]*2
o <- list(o, x[1])
}
myFun(df, obj)
有全局赋值(例如 <<-
),
myFun1 <- function(x, o) {
x[1] <- x[,1]*2
o <- list(o, x[1])
df <<- x
obj <<- o
}
或者,您可以尝试从函数返回对象,然后将 list2env
用于多赋值。
myFun2 <- function(x, o) {
x[1] <- x[,1]*2
o <- append(o, x[1])
list(obj=o, df=x) #setting names here is important for list2env
}
list2env(myFun2(df, obj), environment())
或者,您可以在环境中传递。在 R 中,环境是按引用传递的,
myFun3 <- function(E) {
E$df[1] <- E$df[,1]*2
E$obj <- append(E$obj, E$df[1])
}
myFun3(environment())