R:重复操作n次并存储在向量中

时间:2019-04-23 13:33:53

标签: r loops vector export-to-csv repeat

我有以下代码来随机采样8个观测值中的3个,然后计算变异系数(CV)。

d <- c(4.34238,4.32101,4.35023,4.44773,4.24697,4.08944,4.28733,4.46353)

# Random sampling with replacement:
i <- sample(1:8, 3, replace=TRUE)
X <- d[i]

meanX <- mean(X)
sdX <- sd(X)
cvX <- (sdX/meanX)*100
cvX

问题是,我想对此进行例如10000次引导,并将值存储在向量中或导出为csv,以便以后可以计算平均CV。

我找到了重复执行n次的代码(i); (ii)分别导出值。我如何一起做? 谢谢。

其他问题... 这是一种更有效的方法: (i)每次随机采样3/8个观测值,计算CV,存储值? (ii)生成10000套采样观测值,计算CV,存储值?

2 个答案:

答案 0 :(得分:2)

我已经在向量d中制作了一个随机数矩阵,以便能够执行某些操作,但是也许您可以使用下面的代码使它起作用!问候!

d <- matrix(rnorm(100000), ncol=2)

n_bootstraps <- 50
cvX_vec = rep(0, n_bootstraps)

for (i in 1:n_bootstraps){
  i <- sample(1:8, 3, replace=TRUE)
  X <- d[i,2]
  meanX <- mean(X)
  sdX <- sd(X)
  cvX_vec[i] <- (sdX/meanX)*100
}

write.csv(x = cvX_vec, file = "./blah.csv")

答案 1 :(得分:1)

您可以使用replicate创建具有所有迭代的矩阵:

myfun <- function(){
  i <- sample(1:8, 3, replace=TRUE)
  X <- d[i,2]

  c(meanX = mean(X), sdX = sd(X), cvX = sd(X)/mean(X) * 100)
}

result <- replicate(5, myfun)

可以使用write.table将其导出到csv文件:     write.table(result,“ result.csv”)