2

リストに問題がありますが、unlist()ではうまくいかないようです。

ここに問題があります: lapply()を使用してリストに対して関数を実行します。この関数は、特定の基準で xts オブジェクトを分割し、2 つの xts オブジェクトのリストを返します。lapply()の結果のリストは、複数のサブリストで構成されます (私の例では、出力はlist.2によく似ています)

例:

library(xts)

#create three dummy xts objects
a<-c(1:10)
b<-c(2:5)
c<-c(6:9)

a.by<-as.POSIXct(a, tz="GMT", origin="1990-01-01 00:00:00")
b.by<-as.POSIXct(b, tz="GMT", origin="1990-01-01 00:00:00")
c.by<-as.POSIXct(c, tz="GMT", origin="1990-01-01 00:00:00")

xts.a<-xts(a, order.by=a.by)
xts.b<-xts(b, order.by=b.by)
xts.c<-xts(c, order.by=c.by)

# creating first list of objects a & b. this is passed to my function

list.1<-list(xts.a, xts.b)

# creating second list of objects a & b, c. this is similar to my output

list.2<-list(list.1, xts.c)

目標: これらの xts オブジェクトを他の関数に渡したい。メインリストとすべてのサブリストにあるすべての xts オブジェクトのリストが必要です。私の例では、list(xts.a, xts.b, xts.c) が欲しいです。サブリストをサブセット化し、それとメインリストを分割して、パーツ (xts オブジェクト) で再リストしたいと思います。

問題: データの読み込みが原因で、上記の問題だけでなく、これを自動的に実行しようとしています。そのため、特にこの順序ではなく、リスト内のオブジェクトが 3 つだけの複数のサブリストの場合です。

考え: class() -> list.2[class(list.2)=="list"]で作業してみました

サブセット化ベクトルを作成します (これはこれまでのところ最もうまく機能しているようです) -> subsystem_vector<-lapply(list.2, class)を作成し、このベクトル (およびシーケンス) を使用してリストを選択します -> list.2[[sequence[ subset_vector=="リスト"]]]

しかし、これはすべて複雑すぎるように思えます。もっと簡単な解決策があるはずです。

よろしくお願いします。

ベン

4

2 に答える 2

1

次のような再帰関数を書くことができます:

LL <- vector('list')
rapply2 <- function(x) {
 for(i in seq_along(x)) {
    if (is.xts(x[[i]])) 
      LL <<- append(LL,list(x[[i]]))
     else rapply2(x[[i]])
  }
}

それで

rapply2(list.2)
于 2013-07-24T22:29:51.880 に答える
1
c(list.2[sapply(list.2, is.xts)], unlist(list.2[!sapply(list.2, is.xts)], recursive=F))

これはあなたが探していたものですか?

于 2013-07-24T21:54:20.963 に答える