我们说我有一个数据框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)
答案 0 :(得分:2)
有全局作业(例如<<-
),
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())