#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»)