R-区分参数值

时间:2016-10-07 10:57:53

标签: r

您好我想将一个参数列表传递给我的main函数以使用两个子函数。

f<-function(a,...){
   x1<-f1(...)
   x2<-f2(...)
   }

假设f1使用名称&#34; a&#34;和f2采用名称&#34; a&#34;。我怎么解决这个问题。名称&#34; a&#34;在主函数和两个子函数中使用。我想区分什么名字&#34; a&#34;是为了不同的功能,但这似乎是一项非常艰巨的任务。

我可以举一个更具体的例子

f<-function(x,...){
       print(mean(x)) 
       x1<-dnorm(...)
       x2<-dbinom(...)
       }

显然,dnorm和dbinom使用名称&#34; x&#34;作为输入。但是,我想为每个子函数使用不同的x值。此外,我想使用名称&#34; x&#34;在main函数里面计算它的意思是因为main x是一个向量。

1 个答案:

答案 0 :(得分:0)

由于它们具有相同的名称,因此您需要某种方式来区分它们,否则它们只会发生冲突,正如您所指出的那样。除此之外,真的没什么魔力:你已经发现了这个问题。

您还需要一种方法来保存dbinom - dnorm中的特定参数,因为如果您给dnorm参数size会抛出错误,例如。

您可以写出所有相关的参数,例如:

f<-function(x,dnx, mean=0, sd=1, dnlog=FALSE, dbx, size, prob, dblog=FALSE, ...){
   print(mean(x)) 
   x1<-dnorm(x=dnx, mean, sd, log=dnlog)
   x2<-dbinom(x=dbx, size, prob, log=dblog)
}

或以列表形式提供它们:

 f<-function(x,
             dn_args=list(x=0, mean = 0, sd = 1, log = FALSE), 
             db_args=list(x=5, size=10, prob=0.5, log = FALSE), ...){
   print(mean(x)) 
   x1<-do.call(dnorm, dn_args)
   x2<-do.call(dbinom, db_args)
  }

您还可以考虑是否需要将函数重构为较小的部分。 :)