-2

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

 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)

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

希望我已经清楚地说明了我的问题。

非常感谢您的帮助。

4

1 回答 1

1

让我们看看我是否得到它...

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

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是标准差参数。

于 2013-03-14T13:28:06.917 回答