Я новичок в r. Я пытаюсь сделать свой код менее сложным, используя цикл for

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