#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
, но это может быть проблемой XY4. Спасибо, я отредактировал свой код. Но как здесь использовать 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