Как я должен векторизовать этот простой цикл for в R? - PullRequest
0 голосов
/ 07 октября 2018

Цикл, который нужно векторизовать:

n = 1000000  
x = numeric(n)  
for (I in 1:n) x[i] = rpois(1, 3) + rpois(1, 5)  

Оригинал слишком медленный, у меня пока нет большого опыта с циклами for или семейством apply, поэтому я думаю, что мне просто нужнопосмотрите пример того, как это можно сделать, и я пойму.Спасибо

1 Ответ

0 голосов
/ 07 октября 2018

Попытка

x = rpois(n, 3) + rpois(n, 5)

rpois(n,3) уже создает много розыгрышей, поэтому нет необходимости зацикливаться.

Чтобы увидеть это, обратите внимание на следующее:

Создано в цикле:

set.seed(42)
n <- 10
x = numeric(n)

for (i in 1:n){
  x[i] <- rpois(1, 3) 
}

Создано сразу:

set.seed(42)
y <- rpois(n, 3) 

Убедитесь, чторезультаты равны:

all.equal(x,y)
[1] TRUE

Обратите внимание, что результаты сложения будут немного отличаться друг от друга, поскольку приращения в генераторе случайных чисел будут отличаться, но это незначительная деталь.Дело в том, что петля не нужна.

...