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?
The list can be created using list() function in R. Named list is also created with the same function by specifying the names of the elements to access them. Named list can also be created using names() function to specify the names of elements after defining the list.
The list() function in R is used to create a list of elements of different types. A list can contain numeric, string, or vector elements.
If you select option R, a panel is displayed to allow you to enter the new data set name. Type the new data set name and press Enter to rename, or enter the END command to cancel. Either action returns you to the previous panel.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With