4

考虑创建列表列表的命令,如下所示:

myList <- list(a = list(1:5), b = "Z", c = NA)

这会产生类似的东西:

 $a
 $a[[1]]
 [1] 1 2 3 4 5

 $b
 [1] "Z"

 $c
 [1] NA

现在,当我不列出这个时,

unlist(myList, recursive = FALSE)

我明白了

 $a
 [1] 1 2 3 4 5

 $b
 [1] "Z"

 $c
 [1] NA

而我真正要寻找的是每个子列表中的第一个元素,即

 1
 "Z"
 NA

循环非常慢。请不要循环。

4

3 回答 3

7

我想这取决于你认为什么是循环。例如,我将其称为循环,但也许对您来说没问题?

> sapply(unlist(myList, recursive=FALSE), "[", 1)
  a   b   c 
"1" "Z"  NA 

如果你不想要名字

> sapply(unlist(myList, recursive=FALSE, use.names=FALSE), "[", 1)
[1] "1" "Z" NA 
于 2012-10-09T17:25:49.613 回答
6

@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
于 2012-10-09T17:48:42.397 回答
4

尝试这个:

 rapply(myList, function(x) head(x,1) )
  a   b   c 
"1" "Z"  NA 
于 2012-10-09T17:26:32.240 回答