случайная выборка строки в r - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу сделать выборку 60 случайных строк 1000 раз с помощью replace=TRUE и вычислить коэффициенты корреляции между первым и вторым столбцами в каждой выборке.

Я не знаю, как производить выборку строки случайным образом, поэтому япопытался сэмплировать 60 чисел в 1:60 и сопоставил номера строк.Данные строки представляют собой матрицу 60x2, которая называется data1.

Мой код:

k <- list()
data.sam <- list()

set.seed(1)

for (j in 1:60){
  for (i in 1:1000){
  k[[i]] <- sample(1:60, 60, replace = TRUE)
  }
  data.sam[[i]][j,] <- data1[k[[i]][j],]

  corr <- vector()
  corr[i] <- cor(data.sam[[i]][,1],data.sam[[i]][,2])
}

И оператор показывает:

Error in `*tmp*`[[i]] : subscript out of bounds

1 Ответ

0 голосов
/ 18 сентября 2018

Не похоже, что переменная j делает очень много.Ваша индексация уже векторизована k [[i], так что вам не нужно явно два цикла.Также не сбрасывайте переменную corr внутри цикла.

Вместо этого я мог бы написать:

data1 <- matrix(rnorm(120), 60,2)

for (i in 1:1000){
  k[[i]] <- sample(1:60, 60, replace = TRUE)
  data.sam[[i]] <- data1[k[[i]],]

  corr[i] <- cor(data.sam[[i]][,1],data.sam[[i]][,2])
}

Что дает это:

hist(corr)

histogram

...