#r #loops #for-loop
#r #циклы #for-цикл
Вопрос:
Вот мой текущий код … могу ли я сделать это циклом for?
#sample1, sample2, …, sample6 where samplei is sampling 10^(ith)
sample1 <- abs(rnorm(10)) #use abs because bellcurve is and -
sample2 <- abs(rnorm(10^2))
sample3 <- abs(rnorm(10^3))
sample <- abs(rnorm(10^4))
sample5 <- abs(rnorm(10^5))
sample6 <- abs(rnorm(10^6))
Комментарии:
1.
sapply(1:6, function(x)abs(rnorm(10^x)))
Ответ №1:
Если вы также хотите присвоить его 6 различным переменным, вам нужно будет сделать:
n = 6
invisible(sapply(1:n, function(i) assign(x = paste("sample", i, sep = ""),
value = abs(rnorm(10^i)),
envir = .GlobalEnv)))
Или с помощью цикла for:
for(i in 1:n)
{
assign(x = paste("sample", i, sep = ""), value = abs(rnorm(10^i)), envir = .GlobalEnv)
}
Но гораздо разумнее хранить его в виде списка, например, в:
samples = lapply(1:6, function(i) abs(rnorm(10^i)))
Ответ №2:
R действительно хорош в векторизации, а это значит, что почти каждый раз, когда вы пытаетесь использовать цикл for, есть лучший / быстрый способ сделать это. Я бы переписал ваш образец как:
samples <- abs(rnorm(10^seq(6)))
Затем к каждому образцу можно получить доступ как samples[1]
и т.д.
Комментарии:
1. Это неверно. если n — вектор, то используется длина вектора, т.е. rnorm(1: 3) совпадает с rnorm(3) .