这可能是一个非常简单的答案,但似乎无法找到解决方案。我有一个函数,它提供了一组参数:
theta <-
function(
e = 0.2,l= 0.01,p= 0.05)
return(c(e=e,l=l,p=p))
因此,我可以从中返回一组参数,同时更改其中的一个或多个,例如:使用
theta(e=0.1) #or
theta(l=0.1)
我的问题是我想在另一个函数中调用此函数,其中该函数的输入是变量之一。
所以例如一个函数如:
randFunc<-function(parameter,value){
s<-theta(parameter=value)
return(s)
}
然后使用
randFunc("e",0.1) #or
randFunc("l",0.3)
但是我会得到错误&#34; theta中的错误(参数=值):未使用的参数(参数=值)&#34;
我尝试了一些事情,但似乎无法获得参数&#34;值&#34;在theta函数中使用。
答案 0 :(得分:8)
另一种方法是使用do.call:
randFunc <- function(parameter, value){
L = list(value)
names(L) <- parameter
do.call(theta, L)
}
> randFunc('e', 0.1)
e l p
0.10 0.01 0.05
> randFunc('l', 0.3)
e l p
0.20 0.30 0.05
答案 1 :(得分:3)
您需要在randFunc
的调用中使用字符串,因为您输入的参数不存在。然后,在函数中,您可以使用eval(parse(text = "something"))
将其用作theta
函数的非字符串输入。
randFunc<-function(parameter,value){
s<-theta(eval(parse(text = parameter)) = value)
return(s)
}
然后用
调用它randFunc("e", 0.1)
@Cath提供了一个不使用eval(parse())
的解决方案:
将您的randFunc
更改为:
randFunc<-function(parameter,value){
s <- theta()
s[parameter] <- value
return(s)
}
这非常优雅,肯定会在我自己的未来功能中找到它的方式(或者在修改的时候进入当前的功能)。