Ошибка в `*tmp*`[[k]]: нижний индекс в R
Я хотел спросить, почему я получаю эту ошибку при инициализации списка, например, векторов или другого типа, и как я могу это исправить?
> l <- list()
> l[[1]][1] <- 1
Error in `*tmp*`[[1]] : subscript out of bounds
Это весь код, который мне нужен, на самом деле я хочу получить список таких векторов:
mcorrelation <- list()
for(k in 1:7){
for (ind in 1:7){
mcorrelation[[k]][ind] <- co$estimate
}
}
Должен ли я инициализировать весь список заранее или есть другой способ не получить эту ошибку?
2 ответа
Решение
Поскольку l
нет вектора, вы не хотите указывать позицию в первом элементе списка. Пытаться:
l <- list()
l[[1]] <- 1
Для добавления дополнительных значений к определенным местам в этом новом векторе лучше всего настроить вектор с известной длиной значений, которые должны быть сохранены (по соображениям скорости; см. Почему здесь). Вот пример цикла:
n <- 100
l <- list()
l[[1]] <- NaN*seq(n)
for(i in seq(n)){
l[[1]][i] <- i
}
Что касается вашего конкретного примера:
k <- 7
ind <- 7
mcorrelation <- vector(mode="list", k)
for(i in seq(k)){
mcorrelation[[i]] <- NaN*seq(ind)
for (j in seq(ind)){
mcorrelation[[i]][j] <- rnorm(1)
}
}
mcorrelation
Функция "[" позволяет выполнять несколько назначений без циклов:
> y <- NULL
> y
NULL
> y[cbind(1:2, 1:2)] <- list( list(1,2), list(2,3))
> y
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 2
[[2]]
[[2]][[1]]
[1] 2
[[2]][[2]]
[1] 3