【问题标题】:update function inputs in global environment更新全局环境中的函数输入
【发布时间】:2016-04-22 07:57:00
【问题描述】:

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

【问题讨论】:

标签: r function global-variables


【解决方案1】:

有全局赋值(例如&lt;&lt;-),

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

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 2022-11-02
    • 2018-02-16
    • 1970-01-01
    • 2020-07-24
    • 2017-09-12
    • 1970-01-01
    • 2015-11-10
    • 2020-07-29
    相关资源
    最近更新 更多