Naming list elements in R

I've been doing some work with some large, complex lists lately and I've seen some behaviour which was surprising (to me, at least), mainly to do with assigning names to a list. A simple example:

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 

but:

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

I think the main reason it confuses me is because the form of the left-hand side of first names line in the first for loop needs to be different from that of the right-hand side to work; I would have thought that these should be the same. Could anybody please explain this to me?

3

1 Answer

The first case is the correct usage. In the second case you are sending filList[i] to names<- which is only exists as a temporary subsetted object.

Alternatively, you could just do everything outside the loop with:

names(filList) <- names(Fil) 
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like