考虑创建列表列表的命令,如下所示:
myList <- list(a = list(1:5), b = "Z", c = NA)
Run Code Online (Sandbox Code Playgroud)
这创造了类似的东西:
$a
$a[[1]]
[1] 1 2 3 4 5
$b
[1] "Z"
$c
[1] NA
Run Code Online (Sandbox Code Playgroud)
现在,当我取消这个时,
unlist(myList, recursive = FALSE)
Run Code Online (Sandbox Code Playgroud)
我明白了
$a
[1] 1 2 3 4 5
$b
[1] "Z"
$c
[1] NA
Run Code Online (Sandbox Code Playgroud)
而我实际上正在寻找的是每个子列表中的第一个元素,即
1
"Z"
NA
Run Code Online (Sandbox Code Playgroud)
循环非常慢.请不要循环.
我想这取决于你认为是一个循环.例如,我称这是一个循环,但也许你可以吗?
> sapply(unlist(myList, recursive=FALSE), "[", 1)
a b c
"1" "Z" NA
Run Code Online (Sandbox Code Playgroud)
如果你不想要这些名字
> sapply(unlist(myList, recursive=FALSE, use.names=FALSE), "[", 1)
[1] "1" "Z" NA
Run Code Online (Sandbox Code Playgroud)
@ GSee的解决方案可能是最常见的解决方案,但也有一个rapply()功能(" 递归lapply() ")可以实现您正在寻找的东西:
rapply(myList, function(x) x[1], how = "unlist")
# a b c
# "1" "Z" NA
unname(rapply(myList, function(x) x[1], how = "unlist"))
# [1] "1" "Z" NA
Run Code Online (Sandbox Code Playgroud)