使用函数内的参数调用函数

时间:2013-03-14 11:10:41

标签: r function

我正在编写一个函数,其中一个或多个参数是由函数中的循环生成的向量 例如:

 myfunc<-function(rep, n, arm1, arm2)
   {
   for(i in 1:rep)
    {
     x<-rnorm(n,0,4)
     y<-rnorm(n,0,5)
     res[i]<-t.test(arm1,arm2)
    }
   return(res)
   }

现在我想把这个函数称为

     myfunc(rep = 10, n=10, arm1 = x, arm2 = x) or
     myfunc(rep = 10, n=10, arm1=x,arm2 = y)

这个想法是比较不同的武器。

希望我已经明确说明了我的问题。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

让我们看看我是否明白了......

您希望运行rep个测试,每个测试都有两个n正常随机变量。并且你希望能够改变论点......坦率地说,这不是最好的编程方式..但是,我会尽力帮助你。

首先要做的事情是:在创建变量之前,不能将结果分配给结果res的任意位置。因此,我会在您的代码中添加res <- list()。另外t.test会返回更多信息,因此必须使用双方括号将其附加到list对象。

现在,对于参数,您必须让R理解arm符号参数,以便在函数环境中进行评估。因此,您必须使用substitute捕获它的表达式并将其传递给eval函数:

myfunc<-function(rep, n, arm1, arm2)  
{  
res <- list() ###  
for(i in 1:rep)  
{  
    x<-rnorm(n,0,4)  
    y<-rnorm(n,0,5)  
    res[[i]]<-t.test(eval(substitute(arm1)),eval(substitute(arm2))) ###  
}  
return(res)  
}

试试吧......

更好的方法如下:

newfunc <- function(rep, n, sd1, sd2)  
{  
lapply(1:rep, function(.) t.test(rnorm(n,0,sd1), rnorm(n,0,sd2)))  
}  

现在sd1sd2是标准偏差参数。