考虑创建列表列表的命令,如下所示:
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
循环很慢。请不要循环。
答案 0 :(得分:6)
我想这取决于你认为是一个循环。例如我称这是一个循环,但也许你可以吗?
> 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
答案 1 :(得分:5)
@ GSee的解决方案可能是最常见的解决方案,但也有rapply()
函数(“ recursive 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
答案 2 :(得分:4)
试试这个:
rapply(myList, function(x) head(x,1) )
a b c
"1" "Z" NA