3

関数の結果としてネストされたリストがあります。最上位の要素名が、さらに下の要素名で繰り返されます。

$`1`
$`1`$`1`
[1] 0 0 0 0 0 0 0 1 0

$`1`$`2`
[1] 0 0 0 0 0 0 0 0 0

$`2`
$`2`$`1`
[1] 0 0 0 1 1 0 0 0 0

$`2`$`2`
[1] 0 1 0 0 0 1 0 0 0

適用関数(またはその他)を使用して、要素名とサブ要素名が一致するベクトルを抽出する方法はありますか?例:1$$12$$ 2。私は膨大なリスト(4000個のサブ要素を持つ4000個の要素)を持っているので、効率は必須です。

または、「melt()」を使用してこの混乱から抜け出す方法を見つけましたが、セットのサイズに対しては消費しすぎます。しかし、効果を複製する方法を知っている人がいれば、要素名用、サブ要素名用、ベクトル用の3つの列を持つデータフレームを指定することもできます。

よろしくお願いします:)

4

2 に答える 2

4

これは、必要なベクトルのリストを取得する方法です。

lapply(names(dat), function(x) dat[[x]][[x]])

データフレーム内:

do.call("rbind",
        lapply(names(dat),
               function(x) data.frame(element = x,
                                      subelement = x,
                                      values = dat[[x]][[x]])
        )
)
于 2012-10-02T12:22:15.183 に答える
2

再帰せunlistずに最上位のリスト構造を削除してから、この結果の名前に正規表現を使用したサブセット化を使用できます。

l <- list(`1`=list(`1`=rpois(6,1),`2`=rep(0,6)),`2`=list(`1`=rep(0,6),`2`=rpois(6,1)))
l2 <- unlist(l,recursive=F)
l2[grepl("([0-9]+)[.]\\1",names(l2))]
$`1.1`
[1] 2 0 2 4 1 0

$`2.2`
[1] 0 0 0 2 1 0
于 2012-10-02T13:11:13.167 に答える