拆分一个列表,其元素是多个元素列表

Split a list whose elements are multiple element lists

假设我有一个列表 a 定义为:

a <- list("aaa;bbb", "aaa", "bbb", "aaa;ccc")

我想用分号 ; 拆分此列表,仅获取唯一值,然后 return 另一个列表。到目前为止,我已经使用 str_split():

拆分了列表

a <- str_split(a, ";")

这给了我

> a
[[1]]
[1] "aaa" "bbb"

[[2]]
[1] "aaa"

[[3]]
[1] "bbb"

[[4]]
[1] "aaa" "ccc"

我怎样才能操纵这个列表(使用 unique()?)给我类似

的东西
[[1]]
[1] "aaa" 

[[2]]
[1] "bbb"

[[3]]
[1] "ccc"

或者更简单地说,

[[1]]
[1] "aaa" "bbb" "ccc"

一种选择是在列表中使用 list()unique()unlist()

    # So first you use your code
    a <- list("aaa;bbb", "aaa", "bbb", "aaa;ccc")
    # Load required library 
    library(stringr) # load str_split
    a <- str_split(a, ";")
    # Finally use list() with unique() and unlist()
    list(unique(unlist(a)))
    # And the otuput
    [[1]]
    [1] "aaa" "bbb" "ccc"

base R 中的一种替代方法是使用 rapply,它将函数应用于嵌套列表中的每个最内层元素,并且 return 是默认情况下可能的最简化对象。在这里,它 return 是一个字符向量。

unique(rapply(a, strsplit, split=";"))
[1] "aaa" "bbb" "ccc"

到return一个列表,将输出包装在list

list(unique(rapply(a, strsplit, split=";")))
[[1]]
[1] "aaa" "bbb" "ccc"