для l oop вопрос в r: количество заменяемых элементов не кратно длине замены - PullRequest
1 голос
/ 12 апреля 2020

все

Я новичок в R. Я пробую много способов и все еще не могу решить это. Может кто-нибудь помочь проверить ??

Я пытаюсь произвести 3 раза 100 случайных значений, которые следуют за распределением по квадратам. Консоль говорит, что «количество заменяемых элементов не кратно длине замены». Любая подсказка, чтобы это исправить ??

for(i in 1:3) {
  x1[i] <- rchisq(100, df=2)
  n1[i] <- length(x1[i])
}

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

В качестве объяснения вашей проблемы: вы пытаетесь сохранить вектор из 100 элементов в одном элементе, i th-элемент вектора x1. Для иллюстрации вы можете поместить вектор значений в вектор одинаковой длины:

x <- rnorm(6, 0, 1)
x[1:3] <- c(1,2,3)
x
## [1]  1.0000000  2.0000000  3.0000000 -0.8652300  1.3776699 -0.8817483

Вы можете сохранить их в списке, каждый элемент списка - это вектор, который может иметь любую длину , Вам понадобятся двойные квадратные скобки.

x1 <- list()
for(i in 1:3) {
  x1[[i]] <- rchisq(100, df=2)
  n1[i] <- length(x1[[i]])
}

Списки и векторы - это различные типы структур данных в R, о них вы можете прочитать в advanced R .

0 голосов
/ 12 апреля 2020

Это зависит от того, какие контейнеры вы хотите использовать. На ум приходят два контейнера: список или матрица.

# list format
x1 = list();
n1 = vector();
for(i in 1:3) {
  x1[[i]] <- rchisq(100, df=2)
  n1[i] <- length(x1[[i]])
}

обратите внимание на двойные скобки [[i]], как указано в комментариях

# matrix format
x1 = matrix(NA, nrow = 100, ncol = 3)
n1 = vector();
for(i in 1:3) {
  x1[,i] <- rchisq(100, df=2)
  n1[i] <- length(x1[,i])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...