簡體   English   中英

在 R 中嵌套 for 循環進行模擬

[英]Nested for loop in R for simulation

親愛的社區,

我想構建一個嵌套的 for 循環。 內循環應重復 (x 10.000) 計算支架的 p 值。 規范。 用 j 繪制並將其保存在 p_val 中。 外循環應為我的 i 次抽獎重復這個內循環,其中 i = c(10,50,100,1000) 然后將平均值保存在 p_val_mean 中,它應該是一個只有四個條目的向量。 下面的代碼對我不起作用,我的 p_val_mean 有 1000 個條目,其中只有 4 個包含計算值:

# outer loop

p_val_mean <- rep(NA, 4)
for (i in c(10, 50, 100, 1000)){

# inner loop
n <- 10000
p_val <- rep(NA, 10000)
for(j in 1:n){
  current_data <- rnorm(i,0,1)
  current_t_stat <- t.test(current_data)
  current_p_val <- current_t_stat$p.value
  p_val[j] <- current_p_val
}
p_val_mean[i] <- mean(p_val)
}
p_val_mean

我提前感謝您的回復!

您不能使用 i 作為索引,而是使用它:

p_val_mean <- rep(NA, 4)
N <- c(10, 50, 100, 1000)

for (i in 1:length(N)){

  # inner loop
  n <- 10000
  p_val <- rep(NA, n)
  for(j in 1:n){
    current_data <- rnorm(N[i], 0, 1)
    current_t_stat <- t.test(current_data)
    current_p_val <- current_t_stat$p.value
    p_val[j] <- current_p_val
  }
  p_val_mean[i] <- mean(p_val)
}
p_val_mean

您不需要嵌套循環。 以下單行代碼可以滿足您的需求:

sapply(c(10, 50, 100, 1000), function(x) mean(replicate(x, t.test(rnorm(1000))$p.val)))
#> [1] 0.4272396 0.5089299 0.4686196 0.4930584

我們可以使用map

library(purrr)
map_dbl(c(10, 50, 100, 1000), ~ mean(replicate(.x, t.test(rnorm(1000))$p.val)))
#[1] 0.4030399 0.4840713 0.4791711 0.4960831

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM