Реплицируйте список, чтобы создать список списков
Я пытаюсь создать список со следующей (вложенной) структурой:
l <- list()
for(i in seq(5)) l[[i]] <- list(a=NA,b=NA)
> str(l)
List of 5
$ :List of 2
..$ a: logi NA
..$ b: logi NA
$ :List of 2
..$ a: logi NA
..$ b: logi NA
$ :List of 2
..$ a: logi NA
..$ b: logi NA
$ :List of 2
..$ a: logi NA
..$ b: logi NA
$ :List of 2
..$ a: logi NA
..$ b: logi NA
Я хотел бы сделать это через rep
или аналогично, так как я создаю целую кучу пустых списков, которые я позже заполню. (Я знаю, что могу просто расширить список, обратившись к его следующему индексу, но это не работает при индексации на два уровня).
Я думал, что rep
работает для этого, но это не похоже. ?rep
приводит следующий пример:
fred <- list(happy = 1:10, name = "squash")
rep(fred, 5)
Который возвращает:
> str(rep(fred, 5))
List of 10
$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
$ name : chr "squash"
$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
$ name : chr "squash"
$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
$ name : chr "squash"
$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
$ name : chr "squash"
$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
$ name : chr "squash"
В другими словами, он выравнивает список.
Я также пробовал list( rep(fred,5) )
, который также терпит неудачу.
Как мне скопировать список списков?
2 ответа:
Я думаю, что это имеет отношение к поведению репа, вы хотите гнездиться, прежде чем репа:
rep(list(fred),5)
Выход
str
:List of 5 $ :List of 2 ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10 ..$ name : chr "squash" $ :List of 2 ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10 ..$ name : chr "squash" $ :List of 2 ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10 ..$ name : chr "squash" $ :List of 2 ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10 ..$ name : chr "squash" $ :List of 2 ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10 ..$ name : chr "squash"