2015-05-04 4 views
2

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

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

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

ответ

2

Вы пропустили 1: перед length(x) (т.е. от 1 до длины х на 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 ... 
+0

Это прекрасно работает! Также спасибо за идею функции :) – user3919708

+0

Действительно рад, что я мог бы помочь :) – LyzandeR

Смежные вопросы