在 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 &lt;- function(x) replicate( x, fun(20,30,25,32,15,20,100) ); replicate( 10, fun2(10) )

以上是关于在 R X 次中重复 for 循环并将每个值保存在向量中的主要内容,如果未能解决你的问题,请参考以下文章

在循环中动态命名保存的对象[重复]

遍历 for 循环并将检索到的数据保存在每个循环的唯一 csv 文件中 | Python

循环浏览 WordPress 帖子,并将每个 X 帖子包装在 DIV [重复]

在 for 循环的每次迭代中保存变量并稍后加载它们

R如何为循环编写双精度并将结果存储在矩阵中

R提高嵌套for()循环的效率,以在大型数据集中进行简单的距离计算