我正在编写一个函数,其中一个或多个参数是由函数中的循环生成的向量 例如:
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)
这个想法是比较不同的武器。
希望我已经明确说明了我的问题。
非常感谢您的帮助。
答案 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)))
}
现在sd1
和sd2
是标准偏差参数。