R: Повторить операцию n раз и сохранить в векторе - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть следующий код для случайной выборки 3 из 8 наблюдений, а затем для расчета коэффициента вариации (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, чтобы позже я мог вычислить среднее резюме.

Я нашел коды (i) для повторения операций n раз; и (ii) для экспорта значений отдельно. Как мне сделать это вместе? Спасибо.

Дополнительный вопрос ... Что является более эффективным способом: - (i) Произвольная выборка 3/8 наблюдений каждый раз, вычисление CV, сохранение значений? (ii) Создать 10000 наборов выборочных наблюдений, рассчитать CV, сохранить значения?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Я сделал матрицу случайных чисел в векторе 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 голос
/ 23 апреля 2019

вы можете использовать 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)

Это можно экспортировать в CSV-файл, используя write.table: write.table (result, "result.csv")

...