2

ベクトルを含むかなり複雑なリストの値を分析するのに苦労しています。これは、ARIMAテストをいくつかの時系列に適用するための係数(=ベクトル)のリストです。

これらの係数ベクトルは、空(numeric(0))、またはサイズが異なる場合があります。例:

> test <- list(numeric(0),c(ma1=0.7712434), c(ar1=0.6438842, ar2=-0.3112884))
> test
[[1]]
numeric(0)

[[2]]
      ma1 
0.7712434 

[[3]]
       ar1        ar2 
 0.6438842 -0.3112884 

たとえば、すべての「ar」または「ar1」の用語を簡単に選択できるようにしたい(名前に基づいた選択)。私はこの複雑なリストの処理に苦労しています。したがって、最も簡単な解決策は、このベクトルのリストを単一のベクトルに変換することだと思います(空の数値は無視します)。

上記の例では、次のようになります。

> c(ma1=0.7712434, ar1=0.6438842, ar2=-0.3112884)
       ma1        ar1        ar2 
 0.7712434  0.6438842 -0.3112884

誰が私を助けることができますか?

注:名前に基づいて、たとえばAR用語の数を計算することができました。以下を参照してください。しかし、これらの用語の実際の値を抽出する際にこれを使用することはできません。

tempFunName <- function(vec, name) { substr(names(vec),1,2) == name } # info on coef types
termType <- "ar" # all names starting with "ar"
sum(sapply(lapply(test, tempFunName, name=termType), sum, simplify=TRUE)) # all names starting with "ar"
4

1 に答える 1

2

1つの方法は次のとおりです。

unlist(test)[grep("^ar", names(unlist(test)))]

unlist()リストをベクトルにするだけで、そこから を介して名前の一致でサブセット化できgrepます。名前の^先頭のパターンを検索する手段。

出力をリスト形式で保持したい場合は、次を試すことができます。

lapply(test, function(x) x[grep("^ar", names(x))])

更新: 例

:説明のために、サンプル データにさらにいくつかの変数を追加しました。

test <- list(numeric(0),
             c(ma1 = 0.7712434, star = .001),
             c(ar1 = 0.6438842, ar2 = -0.3112884, par = 0.12345))
lapply(test, function(x) x[grep("ar", names(x))])
# [[1]]
# numeric(0)
# 
# [[2]]
#  star 
# 0.001 
# 
# [[3]]
#       ar1        ar2        par 
# 0.6438842 -0.3112884  0.1234500 
lapply(test, function(x) x[grep("^ar", names(x))])
# [[1]]
# numeric(0)
# 
# [[2]]
# named numeric(0)
# 
# [[3]]
#       ar1        ar2 
# 0.6438842 -0.3112884 
unlist(lapply(test, function(x) x[grep("^ar", names(x))]))
#       ar1        ar2 
# 0.6438842 -0.3112884 
于 2012-08-10T10:51:22.323 に答える