Элементы списка имен в R
В последнее время я работал с некоторыми большими и сложными списками, и я видел некоторое поведение, которое было удивительным (по крайней мере, для меня), главным образом, при назначении имен списку. Простой пример:
Fil <- list(
a = list(A=seq(1, 5, 1), B=rnorm(5), C=runif(5)),
b = list(A="Cat", B=c("Dog", "Bird"), C=list("Squirrel", "Cheetah", "Lion")),
c = list(A=rep(TRUE, 5), B=rep(FALSE, 5), C=rep(NA, 5)))
filList <- list()
for(i in 1:3){
filList[i] <- Fil[i]
names(filList)[i] <- names(Fil[i])
}
identical(Fil,filList)
[1] TRUE
но:
for(i in 1:3){
filList[i] <- Fil[i]
names(filList[i]) <- names(Fil[i])
}
identical(Fil,filList)
[1] FALSE
Я думаю, что главная причина, по которой меня это смущает, заключается в том, что форма левой части первого names
строка в первом цикле for должна отличаться от строки правой части для работы; Я бы подумал, что они должны быть одинаковыми. Кто-нибудь может объяснить мне это?
1 ответ
Решение
Первый случай - правильное использование. Во втором случае вы отправляете filList[i]
в names<-
который существует только как временный поднабор объекта.
В качестве альтернативы, вы можете просто сделать все вне цикла с помощью:
names(filList) <- names(Fil)