xtsオブジェクトのリストを操作するのに問題があります。リスト要素で実行すると、異なる奇妙な動作が発生しlapply
、プログラムがsegfaultされることがあります。Ubuntu9.10でR2.12.2を実行していますが、WindowsXPで2.13.1を実行しても同様の問題が発生していました。
四半期の財務データを含むデータフレームを複数の時系列に分割しようとしています。整数であるCIKコードでデータフレームを分割しています。データフレームは次のとおりです。
> head(CQ[,c("datadate","fqtr","cik","ibq","mkvaltq","prccq","sic")])
datadate fqtr cik ibq mkvaltq prccq sic
3 2009-12-31 1 61478 3.400 601.12800 6.21 3661
4 2010-03-31 2 61478 -13.000 709.07000 7.31 3661
5 2010-06-30 3 61478 75.900 718.77000 7.41 3661
6 2010-09-30 4 61478 10.900 1231.52400 12.67 3661
7 2004-03-31 3 319126 0.424 9.73455 1.05 3861
8 2004-06-30 4 319126 0.407 13.90650 1.50 3861
...
xtsオブジェクトのリストを作成するために使用しているコードは次のとおりです。
CQT<-by(CQ[c("datadate","ibq","cik","mkvaltq","prccq","sic","fqtr")],CQ$cik,function(x)
{
xts(x,order.by=x$datadate,frequency=4)
}
)
CQT<-as.list(CQT)
厳密にリストに変換する必要があるかどうかはわかりませんが、リストには問題はありません。
これにより、次のデータ構造が作成されます。これは私には正しいように見えます。
> head(CQT)
$`20`
datadate ibq cik mkvaltq prccq sic fqtr
2004-03-31 "2004-03-31" "1.422" "20" " 53.75880" " 21.8000" "3823" "1"
2004-06-30 "2004-06-30" "1.389" "20" " 55.04400" " 22.0000" "3823" "2"
2004-09-30 "2004-09-30" "1.562" "20" " 55.69816" " 22.1200" "3823" "3"
2004-12-31 "2004-12-31" "2.237" "20" " 67.11840" " 26.5500" "3823" "4"
2005-03-31 "2005-03-31" "1.643" "20" " 77.28716" " 30.4400" "3823" "1"
2005-06-30 "2005-06-30" "1.916" "20" " 75.12520" " 29.3000" "3823" "2"
...
で実行しようとすると、問題が発生しlapply
ますCQT
。何度も問題が発生した後、テストコードを次のように要約しました。
lapply(CQT,function(x) {
lag.xts(x[,"prccq"],1)
}
)
これを機能させることができれば、私は正しい方向に進んでいるのではないかと思います。
このコードは時々segfaultsするだけです。たとえば、(投稿の目的で)実行した最新の反復では、コードは多数のレコードを問題なく通過します。例えば:
$`6494`
prccq
2004-03-31 NA
2004-06-30 "0.240"
2004-09-30 "0.150"
2004-12-31 "0.090"
2005-03-31 "0.062"
...
ただし、次のようにスローされます。
$`6720`
Error in vector(storage.mode(x)) :
vector: cannot make a vector of mode 'NULL'.
これは必ずしもエラーではありません。キャラクターなどについて不満を言うことがあり、同じレコードで2回停止したことはありません。この特定のレコードには何も問題はないようです。
> CQT$"6720"
datadate ibq cik mkvaltq prccq sic fqtr
2004-03-31 "2004-03-31" " 10.740" "6720" "559.8638" "16.03" "3949" "1"
2004-06-30 "2004-06-30" " 6.178" "6720" "558.6060" "15.70" "3949" "2"
2004-09-30 "2004-09-30" " 13.198" "6720" "667.6474" "14.31" "3949" "3"
2004-12-31 "2004-12-31" " 8.825" "6720" "743.1205" "15.88" "3949" "4"
2005-03-31 "2005-03-31" " 2.324" "6720" "643.6650" "13.75" "3949" "1"
2005-06-30 "2005-06-30" " 1.453" "6720" "594.0200" "12.68" "3949" "2"
2005-09-30 "2005-09-30" " 16.740" "6720" "534.5802" "11.40" "3949" "3"
2005-12-31 "2005-12-31" "-232.078" "6720" "474.1590" "10.11" "3949" "4"
2006-03-31 "2006-03-31" " 3.642" "6720" "589.5614" "12.55" "3949" "1"
2006-06-30 "2006-06-30" " 2.143" "6720" "514.9567" "10.94" "3949" "2"
2006-09-30 "2006-09-30" " 21.518" "6720" "552.9757" "11.73" "3949" "3"
2006-12-31 "2006-12-31" " 10.385" "6720" "651.7707" "13.19" "3949" "4"
2007-03-31 "2007-03-31" " 4.767" "6720" "597.7659" "12.09" "3949" "1"
私はこれについてはちょっと終わりです。コーディングが間違っているか(xtsオブジェクトのリストを操作する良い例を見つけることができなかった)、またはxtsパッケージに問題があるかどうかはわかりません。パッケージを削除してから、R-Forgeリポジトリを使用して再インストールすることでxtsを再インストールしたので、最新バージョンを使用する必要があります。
私が提供できる追加情報があれば教えてください。