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()関数( " 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
于 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 に答える