更新全局环境中的功能输入

时间:2016-01-16 22:26:06

标签: r function global-variables

我们说我有一个数据框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中。如何更新全局环境中的xo?换句话说,我如何更新功能dfobj

myFun <- function(x, o) {
  x[1] <- x[,1]*2
  o <- list(o, x[1])
}

myFun(df, obj)

1 个答案:

答案 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())