How to extract elements from a list with mixed elements

前端 未结 3 1435
北海茫月
北海茫月 2020-12-24 06:27

I have a list in R with the following elements:

[[812]]
[1] \"\"             \"668\"          \"12345_s_at\" \"667\"          \"4.899777748\" 
[6] \"49.53333         


        
相关标签:
3条回答
  • 2020-12-24 07:05

    In case you wanted to use the code you typed in your question, below is the fix:

    listdata <- 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" ))
    
    v <- character() #creates empty character vector
    list_len <- length(listdata)
    for(i in 1:list_len)
        v <- c(v, listdata[[i]][3]) #fills the vector with list elements (not efficient, but works fine)
    
    print(v)
    [1] "12345_s_at" "6789_at"    "12351_s_at"
    
    0 讨论(0)
  • 2020-12-24 07:23

    With purrr you can extract elements and ensure data type consistency:

    library(purrr)
    
    listdata <- 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" ))
    
    map_chr(listdata, 3)
    ## [1] "12345_s_at" "6789_at"    "12351_s_at"
    

    There are other map_ functions that enforce the type consistency as well and a map_df() which can finally help end the do.call(rbind, …) madness.

    0 讨论(0)
  • 2020-12-24 07:25

    If you want to extract 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 returns a list with only the third element
    unlist(lapply(List, '[[', 3)) # This returns a vector with the third element
    

    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 we can reproduce your problem easily.

    0 讨论(0)
提交回复
热议问题