[R] Accessing elements of a list

Marc Schwartz marc_schwartz at me.com
Wed May 25 21:31:25 CEST 2011


On May 25, 2011, at 2:25 PM, Seth W Bigelow wrote:

> I have a list that is made of lists of varying length. I wish to create a 
> new vector that contains the last element of each list. So far I have used 
> sapply to determine the length of each list, but I'm stymied at the part 
> where I index the list to make a new vector containing only the last item 
> of each list
> 
> mylist = list(c(1,2,3),c("cat","dog"),c("x","y","z","zz"))      # Create 
> list
> 
> last <- sapply(mylist,length) # Make vector with list lengths 
> 
> last_only <- mylist[[1:length(mylist)]][last]   # Crash and burn trying to 
> make new vector with last items! 
> 
> How do I do this last step?


See ?tail

> lapply(mylist, tail, 1)
[[1]]
[1] 3

[[2]]
[1] "dog"

[[3]]
[1] "zz"


You can't actually create a vector, since your list contains both numeric and alpha data types and a vector can only contain a single data type. The 3 would be coerced to "3" (a character 3, not the number 3).

If your actual data contains the same type in each element, replace lapply() above with sapply() and that will return a vector.

HTH,

Marc Schwartz



More information about the R-help mailing list