23

私はRの初心者です t1.Rに次のようなリストがあります

[[1]]
[[1]][[1]]
[1] "a"       "control"


[[2]]
[[2]][[1]]
[1] "a"        "disease1"


[[3]]
[[3]][[1]]
[1] "a"        "disease2"


[[4]]
[[4]][[1]]
[1] "b"       "control"


[[5]]
[[5]][[1]]
[1] "b"        "disease1"


[[6]]
[[6]][[1]]
[1] "b"        "disease2"

最初の要素の一意のリストをベクトル、つまり ["a", "b"] from this vector に取得する必要がありますt1。これどうやってするの?

4

7 に答える 7

21

rapplyさらに別のオプションを提供します:

unique(rapply(t1, function(x) head(x, 1)))
于 2013-01-17T12:08:50.930 に答える
19

別の方法は使用することunlistです:

> t1=list(list(c("a","control")),list(c("b","disease1")))
> t1
[[1]]
[[1]][[1]]
[1] "a"       "control"


[[2]]
[[2]][[1]]
[1] "b"        "disease1"

> matrix(unlist(t1),ncol=2,byrow=TRUE)
     [,1] [,2]      
[1,] "a"  "control" 
[2,] "b"  "disease1"
于 2013-01-17T10:09:51.420 に答える
14

と を使用do.callrbindて、リストを に連結しますdata.frame。次にunique、最初の列で使用して、一意のアイテムを取得できます (@AR で指定された例を使用)。

spam = do.call("rbind", lapply(t1, "[[", 1))
> spam
     [,1] [,2]      
[1,] "a"  "control"                                                         
[2,] "b"  "disease1" 
> unique(spam[,1])
[1] "a" "b"
于 2013-01-17T10:07:52.220 に答える
4

1 つまたは複数のサブリストに複数の要素が含まれる場合の一般的なケースを処理しようとしました。

例えば:

ll <- 
        list(list(c("a","control")),
             list(c("b","disease1")),
             list(c("c","disease2"),c("c","disease2bis")), # 2 elements
             list(c("d","disease3")),
             list(c("e","disease4"))
)

次のようなことができます:

 unlist(lapply(ll,                                 ## for each element in the big list
        function(x) 
             sapply(1:length(x),                   ## for each element in the sublist
             function(y)do.call("[[",list(x,y))))) ## retrieve x[[y]]


[1] "a"           "control"     "b"           "disease1"    "c"         
     "disease2"    "c"           "disease2bis" "d"           "disease3"   
[11] "e"           "disease4"   
于 2013-01-17T10:29:18.893 に答える