web-dev-qa-db-fra.com

Nommer les éléments de liste dans R

J'ai récemment travaillé sur de grandes listes complexes et j'ai vu un comportement qui était surprenant (du moins pour moi), principalement en ce qui concerne l'attribution de noms à une liste. Un exemple simple:

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

mais:

for(i in 1:3){
  filList[i] <- Fil[i]
  names(filList[i]) <- names(Fil[i])
}
identical(Fil,filList)
[1] FALSE

Je pense que la principale raison pour laquelle cela m'embrouille est que la forme du côté gauche de la première ligne names dans la première boucle for doit être différente de celle du côté droit pour fonctionner; J'aurais pensé que ceux-ci devraient être les mêmes. Quelqu'un pourrait-il me l'expliquer?

24
RobertMyles

Le premier cas est l'utilisation correcte. Dans le deuxième cas, vous envoyez filList[i] à names<- qui n'existe qu'en tant qu'objet sous-ensemble temporaire.

Alternativement, vous pouvez tout faire en dehors de la boucle avec:

names(filList) <- names(Fil)
29
James