3

Rにリストのリストがあります。これをリストの配列に変換したいのですが、リストのリストの配列しか取得できません。

r <- list(list(a=1, b=NULL, c=NULL, d=1.23),
          list(a=2, b=NULL, c=NULL, d=3.32),
          list(a=3, b=NULL, c=NULL, d=2.13),
          list(a=4, b=NULL, c=NULL, d=3.25),
          list(a=5, b=NULL, c=NULL, d=0.14),
          list(a=6, b=NULL, c=NULL, d=5.13))
x <- array(r, dim=c(3,2))
x[1,1] # now a list of length 1 containing an element which is a list with components a--d

ご覧のとおりx[1,1]、たとえば)はリストのリストになりましたが、「外部」リストは役に立ちません。むしろ、である配列が欲しいyです。これを取得するための最良の方法は何ですか(base-Rの関数を使用(追加パッケージなし))?y[i,j]x[i,j][[1]]

unlist()のようなハッカリーを使おうとしましarray(unlist(r, recursive=FALSE), dim=c(3,2))たが、失敗しました。sapply(r, FUN=I)少なくとも行列を与える...多分それは役立つ(?)

4

2 に答える 2

5

二重角かっこを使用しますx[[1,1]]

于 2012-12-30T15:30:18.717 に答える
1

設計上、これを行うことはできません。

ベクトル要素は、定義上、長さ1のベクトルであり、配列/行列は依然として次元を持つベクトルです。

リストはそれ自体が一般的なベクトルであるため、他のリスト(または配列、行列)の要素にすることができますが、それ自体の長さが1である場合に限ります。

ところで、これが[]を使用してリストに含まれるオブジェクトを選択すると、[[]]を使用して取得する必要がある実際のオブジェクトではなく、オブジェクトを含むサイズ1のリストのみが返される理由です。

したがって、答えは、「外部」リストを削除する方法は実際にはありません。

詳細については、R言語定義マニュアルを参照してください。

于 2012-12-30T15:17:14.500 に答える