r语言 - 更新全局环境中的函数输入



假设我有一个数据帧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)

有全局赋值(例如 <<-),

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

相关内容

  • 没有找到相关文章

最新更新