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