R: Повторить операцию n раз и сохранить в векторе

#r #loops #vector #export-to-csv #repeat

#r #циклы #вектор #экспорт в csv #повторить

Вопрос:

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

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

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

Комментарии:

1. Не могли бы вы привести воспроизводимый пример для d ? То есть не размещайте ссылки (или изображения, если на то пошло) для данных, а скорее публикуйте то, что мы можем легко скопировать / вставить в нашем сеансе

2. Отредактировал вопрос по вашему запросу

Ответ №1:

Я создал матрицу случайных чисел в векторе 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")
  

Ответ №2:

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