Layla - 2 months ago 6
R Question

# How to extract elements from a list in R

I have a list in R with the following elements:

``````[[812]]
[1] ""             "668"          "12345_s_at" "667"          "4.899777748"
[6] "49.53333333"  "10.10930207"  "1.598228663"  "5.087437057"

[[813]]
[1] ""            "376"         "6789_at"  "375"         "4.899655078"
[6] "136.3333333" "27.82508792" "2.20223398"  "5.087437057"

[[814]]
[1] ""             "19265"        "12351_s_at" "19264"        "4.897730912"
[6] "889.3666667"  "181.5874908"  "1.846451572"  "5.087437057"
``````

I know I can access them with something like
`list_elem[[814]][3]`
in case that I want to extract the third element of the position 814.
I need to extract the third element of all the list, for example
`12345_s_at`
, and I want to put them in a vector or list so I can compare their elements to another list later on. I have done the following code:

``````elem<-(c(listdata))
lp<-length(elem)
for (i in 1:lp)
{
newlist<-c(listdata[[i]][3]) ###maybe to put in a vector
print(newlist)
}
``````

When I print the results I get the third element, but like this:

``````  [1] "1417365_a_at"
[1] "1416336_s_at"
[1] "1416044_at"
[1] "1451201_s_at"
``````

so I cannot traverse them with an index like
`newlist[3]`
, because it returns
`NA`

Where is my mistake?
Thanks

If you want to extrat the third element of each list element you can do:

``````List <- list(c(1:3), c(4:6), c(7:9))
lapply(List, '[[', 3)  # This retuns a list with only the third element
unlist(lapply(List, '[[', 3)) # This retuns a vector with the third elements
``````

Using your example and taking into account @GSee comment you can do:

``````yourList <- list(c("","668","12345_s_at","667", "4.899777748","49.53333333",
"10.10930207", "1.598228663","5.087437057"),
c("","376", "6789_at",  "375",  "4.899655078","136.3333333",
"27.82508792", "2.20223398",  "5.087437057"),
c("", "19265", "12351_s_at", "19264", "4.897730912",
"889.3666667", "181.5874908","1.846451572","5.087437057" ))

sapply(yourList, '[[', 3)
[1] "12345_s_at" "6789_at"    "12351_s_at"
``````

Next time you can provide some data using `dput` on a portion of your dataset so that we can reproduce your problem easily.

Source (Stackoverflow)