使用R中第二个函数内一个函数的变量值

时间:2017-04-26 09:12:06

标签: r function parameters

这可能是一个非常简单的答案,但似乎无法找到解决方案。我有一个函数,它提供了一组参数:

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函数中使用。

2 个答案:

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

这非常优雅,肯定会在我自己的未来功能中找到它的方式(或者在修改的时候进入当前的功能)。