### Start with a list aList <- list() ### Lists in R can hold vectors, of _unrelated_ types, with names ### attached. The list we made above is empty, and R will tell you ### so if you ask: print(aList) str(aList) ### Once a list is created, we can add named objects to it like so: aList[['bob']] <- 3 aList$frank <- 'five' aList['3'] <- 'ten' aList['4'] <- list(5) ### Each of these is neatly slotted in after the other and, as ### expected, the list then has a length of four: length(aList) ### The names of the objects can be extracted names(aList) ### Either names or numbers can be used for indexing, ### then each element of the list is printed in turn: for ( i in names(aList) ) { print( aList[[i]] ) } for ( i in seq_along(aList) ) { print( aList[[i]] ) } ### Weirdness! ### If you index with single brackets, you get the ### elements of the list, each as a list of length 1. ### There's a reason this happens for ( i in names(aList) ) { print( aList[i] ) } ### You can add unnamed objects like so: aList[[10]] <- 8 ### Something funny happened: print(aList) ### When elements are added to a list by numerical index, and ### the intervening elements between 1 and N do not exist, ### the intervening elements are filled with unnamed NULLs. ### Now something funny happens: aList[['5']] <- list(5) ### To actually get at that unnamed five as a length 1 numeric ### vector you have to say: print(aList[['5']][[1]]) ### What's the use? We'll do that next.
Monday, November 30, 2009
R farts: lists
I've been thinking about doing an R idioms post on indexing, but I need to talk about data structures to do that first... and I just can't get it together yet, so here's an R fart:
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment