R:修改函数中定义的变量

R:修改函数中定义的变量,r,list,function,scope,R,List,Function,Scope,我有一个很长的变量列表,我用一个函数把它们包装成一个列表。然后将输出列表传递给另一个函数 比如说, #var1:var10 foo <- function(){ var1 = 1 var2 = 3 var3 = var1 + var3 var4 = var3*var2 #e.t.c return(unlist(as.list(environment()))) } params <- foo() foo_solve(model,params) 但是基于其他变量

我有一个很长的变量列表,我用一个函数把它们包装成一个列表。然后将输出列表传递给另一个函数

比如说,

 #var1:var10
 foo <- function(){
 var1 = 1
 var2 = 3
 var3 = var1 + var3
 var4 = var3*var2 
 #e.t.c
 return(unlist(as.list(environment())))
 }
 params <- foo()
 foo_solve(model,params)
但是基于其他变量计算的变量呢

列表(a=value,c=value2,d=a+d)
不起作用


提前谢谢

很抱歉,您已经正确地确定了在解决方案中使用函数,但完全超出了范围。但让我们逐一回答这些问题:

有没有办法访问foo中定义的变量

不,这是通过设计,即函数中定义的内容保留在函数中,并且只能从函数及其子函数(即,函数本身调用的内容)访问

有没有办法。。。是否修改/覆盖默认值

正如您正确推断的那样,这就是函数参数的用途。但解决办法更简单;首先,对于输入变量:

foo <- function(var1 = 1, var2 = 3) {
  var3 <- var1 + var2
  var4 <- var3 * var2
  return(c(var1, var2, var3, var4))
}
如果返回的值比某些标量值更复杂,只需使用
list
而不是简单的
c

但是基于其他变量计算的变量呢

这是它得到乐趣的地方;根据您想做的事情的复杂性和用户应该具有的灵活性,有几个选项。首先,我们可以尝试扩展上述解决方案,以包括计算值,并仅在未给出时计算它们:

foo <- function(var1 = 1, var2 = 3, var3, var4) {
  if (missing(var3))
    var3 <- var1 + var2
  if (missing(var4))
    var4 <- var3 * var2
  return(c(var1, var2, var3, var4))
}
事实证明,它在这种情况下有效,但不要这样做。它不适用于更复杂的数据类型(列表、数据帧),而且它是一种糟糕的编码风格,因为它也会降低函数的可读性

  return(c(v1=var1, s2=var2, var3=var3, m4=var4))
foo <- function(var1 = 1, var2 = 3, var3, var4) {
  if (missing(var3))
    var3 <- var1 + var2
  if (missing(var4))
    var4 <- var3 * var2
  return(c(var1, var2, var3, var4))
}
  foo <- function(var1 = 1, var2 = 3, var3 = var1 + var2, var4 = var3 * var2) {
    return(c(var1, var2, var3, var4))
  }