Включение индекса внутри команды вставки при выполнении цикла в R

#r #list #for-loop #indexing

#r #Список #для цикла #индексирование

Вопрос:

Я хочу присвоить значение предопределенным спискам, используя индекс в команде вставки при выполнении цикла в R.

Я всегда получаю сообщение об ошибке, что цель назначения расширяется до неязыковых объектов.

Вот пример:

 List_1 <- List_2 <- list()

for(i in 1:2){
    paste("List_", i, sep="")[[i]] <- i
}
  

Ожидаемый результат может быть сгенерирован:

 List_1[[1]] <- 1; List_1[[2]] <- 2
List_2[[1]] <- 1; List_2[[2]] <- 2
  

Комментарии:

1. Попробуйте rep(list(0), 2) , если предполагается создать список из нулей

2. Нет, это всего лишь пример, присваиваемое значение также зависит от другого индекса.

3. Я думаю, вам нужно assign , но это может быть проблемой XY

4. Спасибо, я отредактировал свой код. Но как здесь использовать assign?

Ответ №1:

Более «R»-способ может быть:

 List_12 <- as.list(1:2)

for(i in 1:2){
    for(j in 1:2){
        List_12[[i]][[j]] <- i
    }
}
  

Вы можете присвоить имена своим спискам внутри этой структуры:

 names(List_12) <- paste0("List_",c(1,2))
  

Затем вы можете индексировать по имени:

 List_12[["List_1"]]
  

Ответ №2:

Я не совсем понимаю, почему в каждом списке должны быть только нули. Однако присвоение элементам вставленных имен является головной болью в R. Вы должны использовать функцию assign и указать среду. Что-то вроде этого.

 for(i in 1:2){
  values <- list(1:i)
  assign(x = paste0("List_", i), value = values, envir = globalenv())
}

List_1
[[1]]
[1] 1
List_2
[[1]]
[1] 1 2