将列表转换为向量的更好方法?

sha*_*roz 38 r list plyr

我有一个命名值列表:

myList <- list('A'=1, 'B'=2, 'C'=3)
Run Code Online (Sandbox Code Playgroud)

我想要一个具有该值的向量 1:3

我无法弄清楚如何在不定义函数的情况下提取值.有一种我不知道的简单方法吗?

library(plyr)
myvector <- laply(myList, function(x) x)
Run Code Online (Sandbox Code Playgroud)

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

Aru*_*run 84

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

unlist(myList, use.names=FALSE)
Run Code Online (Sandbox Code Playgroud)

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

hrb*_*str 15

purrr::flatten_*()也是一个不错的选择.这些flatten_*功能增加了精简检查并确保了类型安全.

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

purrr::flatten_dbl(myList)
## [1] 1 2 3
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下, flatten() 和 unlist() 都会删除 NULL 元素。有什么办法可以保存这些吗? (5认同)

小智 5

这可以通过使用unlistbefore来完成as.vector。结果与使用参数相同use.names=FALSE

as.vector(unlist(myList))
Run Code Online (Sandbox Code Playgroud)

  • 调用两个函数而不是一个函数有什么好处? (5认同)