在 R X 次中重复 for 循环并将每个值保存在向量中
Posted
技术标签:
【中文标题】在 R X 次中重复 for 循环并将每个值保存在向量中【英文标题】:Repeating a for loop in R X times and saving each value in a vector 【发布时间】:2022-01-21 05:44:47 【问题描述】:我有下面的代码,它是一个重复 100 倍 t 检验的函数,以从随机样本组(grp1 和 grp2)中产生所需的功率值。我想要做的是重复此函数 X 次(X 是用户输入的值)并每次在向量中捕获值(在本例中为 pwr)。我玩过 repeat 和 lapply 函数,但要么重复相同的值,要么什么都没有。有人可以帮我指明一个方向来完成我想做的事情吗?
fun <- function(n1, n2, mu1, mu2, sig1, sig2, reps)
grp1 <- matrix(rnorm(reps*n1, mu1, sig1), nrow = n1, ncol = reps) # Generate random group 1
grp2 <- matrix(rnorm(reps*n2, mu2, sig2), nrow = n2, ncol = reps) # Generate random group 2
pvals <- NULL
for(i in 1:reps)
pvals[i] <- t.test(grp1[,i], grp2[,i])$p.value
pwr <- sum(pvals < 0.05)/reps
print(pwr)
运行上述代码后的示例答案:
fun(20,30,25,32,15,20,100)
[1] 0.24 # <-This is the end value I want 1000x placed in a vector
我想要的示例答案:
[1] 0.48 0.42 0.68 0.17 0.2 0.97 0.95 0.53 0.42 0.61 0.64 0.62 0.42 0.40 0.57 0.50
...
...
...
[997] 0.85 0.37 0.40 0.67
【问题讨论】:
【参考方案1】:也许这就是你想要的
fun <- function(n1, n2, mu1, mu2, sig1, sig2, reps)
grp1 <- matrix(rnorm(reps*n1, mu1, sig1), nrow = n1, ncol = reps) # Generate random group 1
grp2 <- matrix(rnorm(reps*n2, mu2, sig2), nrow = n2, ncol = reps) # Generate random group 2
pvals <- NULL
for(i in 1:reps)
pvals[i] <- t.test(grp1[,i], grp2[,i])$p.value
pwr <- sum(pvals < 0.05)/reps
pwr
replicate( 1000, fun(20,30,25,32,15,20,100) )
[1] 0.23 0.25 0.34 0.35 0.28 0.24 0.24 0.28 0.27 0.24 0.26 0.32 0.24 0.18 0.20
# etc...
[991] 0.33 0.22 0.36 0.31 0.21 0.27 0.21 0.29 0.29 0.23
【讨论】:
谢谢你!但我或多或少想做的是将它添加到函数中,我将在函数参数行中输入值(比如在 reps 值之后)并使其成为另一个循环。因此,与其在函数外部复制它,我更喜欢在函数中进行。或者让另一个函数调用原始函数并在那里执行。 @dnchan19 那么最后你想要一个包含 1000 个值的向量重复 X 次吗?你可以做replicate( X, replicate( 1000, fun(20,30,25,32,15,20,100) ) )
或fun2 <- function(x) replicate( x, fun(20,30,25,32,15,20,100) ); replicate( 10, fun2(10) )
以上是关于在 R X 次中重复 for 循环并将每个值保存在向量中的主要内容,如果未能解决你的问题,请参考以下文章
遍历 for 循环并将检索到的数据保存在每个循环的唯一 csv 文件中 | Python