【问题标题】:Convert named list to vector with values only将命名列表转换为仅包含值的向量
【发布时间】:2020-06-24 02:46:30
【问题描述】:

我有一个命名值列表:

myList <- list('A' = 1, 'B' = 2, 'C' = 3)

我想要一个值为1:3的向量

我不知道如何在不定义函数的情况下提取值。有没有我不知道的更简单的方法?

library(plyr)
myvector <- laply(myList, function(x) x)

是否有类似于 myList$Values 的东西来剥离名称并将其作为向量返回?

【问题讨论】:

    标签: r list


    【解决方案1】:

    unlistuse.names = FALSE 参数一起使用。

    unlist(myList, use.names=FALSE)
    

    【讨论】:

    • 请注意,即使myList 的元素属于length()!=1unlist 也会静默工作:unlist(list(1, 2, 3:4)) == c(1, 2, 3, 4)。这与 OP plyr 解决方案和简单地使用 as.integer(myList) 不同,可能不是您想要/期望的。
    【解决方案2】:

    purrr::flatten_*() 也是一个不错的选择。 flatten_* 函数添加了简单的健全性检查并确保类型安全。

    myList <- list('A'=1, 'B'=2, 'C'=3)
    
    purrr::flatten_dbl(myList)
    ## [1] 1 2 3
    

    【讨论】:

    • flatten() 和 unlist() 默认都删除 NULL 元素。有什么办法保存这些?
    【解决方案3】:

    这可以通过在as.vector 之前使用unlist 来完成。 结果和使用参数use.names=FALSE一样。

    as.vector(unlist(myList))
    

    【讨论】:

    • 调用两个函数而不是一个函数有什么好处?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2021-02-22
    • 2013-08-03
    • 2013-10-16
    相关资源
    最近更新 更多