Цикл for не индексируется должным образом - результаты помещаются в матрицу из цикла for - PullRequest
0 голосов
/ 02 октября 2018

Итак, я пытаюсь сделать 10 различных моделей бутстрапа, с размерами выборки 10,20, ..., 100.Итак, я создал вектор, содержащий эти размеры выборки, а затем перебрал их, используя цикл for, как показано ниже.

Цикл while просто вычисляет среднее значение выборки начальной загрузки 1800 раз и сохраняет все эти значения ввектор K. Это означает, что я должен получить 10 различных этих векторов K и, наконец, для каждого j, я хочу поместить каждый K в один столбец в матрице L.

Проблема в том, что я получаю матрицу L, но все столбцы идентичны.Что-то не так с циклом, и я не могу понять, что это такое.

Любой вклад приветствуется.Вот мой код:

N = 1800
i = 0
K = vector("numeric", 1800L)
L = matrix(nrow = 1800, ncol = 10)
ListValues = c(10,20,30,40,50,60,70,80,90,100)

for (j in 1:10){
  while (i <= N){
    x = sample(Data, ListValues[j])
    K[i] = mean(x)
    i = i + 1
  }
  L[,j] = K
}
print(L)

Результат:

> print(L)
            [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]     [,9]    [,10]
   [1,] 3.669182 3.669182 3.669182 3.669182 3.669182 3.669182 3.669182 3.669182 3.669182 3.669182
   [2,] 3.764834 3.764834 3.764834 3.764834 3.764834 3.764834 3.764834 3.764834 3.764834 3.764834
   [3,] 4.324697 4.324697 4.324697 4.324697 4.324697 4.324697 4.324697 4.324697 4.324697 4.324697
   [4,] 4.473386 4.473386 4.473386 4.473386 4.473386 4.473386 4.473386 4.473386 4.473386 4.473386

Ответы [ 2 ]

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

Вот более короткая версия:

N <- 1800L
L <- matrix(nrow = N, ncol = 10)
ListValues <- c(10,20,30,40,50,60,70,80,90,100)
for (j in 1:10) L[,j] <- replicate(N, mean(sample(Data, ListValues[j])))

или даже короче (но не быстрее):

N <- 1800L
ListValues <- c(10,20,30,40,50,60,70,80,90,100)
L <- sapply(1:10, function(j) replicate(N, mean(sample(Data, ListValues[j]))))
0 голосов
/ 02 октября 2018

Попробуйте это:

N = 1800
i = 0
K = vector("numeric", 1800L)
L = matrix(nrow = 1800, ncol = 10)
ListValues = c(10,20,30,40,50,60,70,80,90,100)

for (j in 1:10){
  i = 0
  while (i <= N){
    x = sample(Data, ListValues[j])
    K[i] = mean(x)
    i = i + 1
  }
  L[,j] = K
}
print(L)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...