Ошибка в `*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
Другие вопросы по тегам