Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Naming list elements in R

Tags:

list

r

names

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?

like image 345
RobertMyles Avatar asked Jul 28 '16 17:07

RobertMyles


People also ask

How do you name a list of elements in R?

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.

What does list () do in R?

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.

How do you name data in R?

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.


1 Answers

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) 
like image 84
James Avatar answered Sep 25 '22 09:09

James