Образец 5 раз и сумма, с заменой

Пробую пробовать с заменой с небольшой закруткой. Я хочу выбрать список, вектор и т. Д. 5 раз и просуммировать это. И замените 5 значений выборки, и сделайте это 1000 раз.

x<- 1:1000
samp <- matrix(NA, ncol = 1, nrow = 1000)
for(i in length(x)){
samp[i,] <- sum(sample(x,5,replace = TRUE))}

Я не могу понять, почему этот цикл не работает


person user3919708    schedule 04.05.2015    source источник


Ответы (1)


Вы пропустили 1: перед length(x) (т.е. от 1 до длины x на 1). Ваш код должен быть таким:

x<- 1:1000
samp <- matrix(NA, ncol = 1, nrow = 1000)
for(i in 1:length(x)){
  samp[i,] <- sum(sample(x,5,replace = TRUE))}

Что отлично работает:

> str(samp)
 int [1:1000, 1] 2715 2312 3180 1364 2851 2429 2888 2381 2772 2317 ...

Кроме того, for-loops имеют плохую репутацию медленных в R, поэтому вы можете рассмотреть другие способы зацикливания, такие как использование способа C++ с (например) replicate следующим образом:

Определите функцию:

myfunc <- function(x) {
  sum(sample(x,5,replace = TRUE))
}

А затем используйте это так:

x <- 1:1000
mymat <- matrix(replicate(1000, myfunc(x)), ncol=1)

> str(mymat)
 int [1:1000, 1] 2481 2236 2492 1759 1905 3243 2606 2624 3013 2309 ...
person LyzandeR    schedule 04.05.2015
comment
Это прекрасно работает! Также спасибо за идею функции :) - person user3919708; 04.05.2015
comment
Очень рад, что смог помочь :) - person LyzandeR; 04.05.2015