2011-08-09 7 views
3

xtsオブジェクトのリストの操作に問題があります。リスト要素にlapplyを実行すると、私は違った奇妙な振る舞いをします。時にはプログラムsegfaultsもあります。 Ubuntu 9.10でR 2.12.2を実行していますが、Windows XPで2.13.1と同様の問題が発生していました。セグメンテーションフォールトがXtsオブジェクトのリストで動作しています。

私は、四半期財務データを含むデータフレームを複数の時系列に分割しようとしています。私は整数である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) 

私はそれをリストに変換することは厳密には必要であることを確認していないが、私リストに心地よく感じる。私はCQTlapplyを実行しようとすると問題が発生する

> 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,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'. 

これは必ずしもエラーではありません。時々私は、文字または何か他のものについての苦情を取得し、それが同じレコードに停止したことはありません二度。この特定のレコードには何も問題はないようです:

> 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を再インストールしたので、最新のバージョンが必要です。

私が提供できる追加情報がある場合はお知らせください。

+1

segfaultを取得した場合は、パッケージ管理者にメールを送信する必要があります(この場合は共著者です)。それらはバグによって引き起こされます。 R-forgeのバージョンが不安定になる可能性があります。最新のCRANバージョン(R-2.13.1を使用)にはまだ問題はありますか? –

+0

Nevermind;私はCRANのバージョンを使って複製することができます。 –

+0

Joshの最初の答えを明確にするために、セグメンテーションフォルトは、独自のCまたはFortranコードをコンパイルしてリンクしていない場合、常にバグとしてカウントされます。これは、ベースRではなく、寄付されたパッケージのバグであることが最も多いです。 –

答えて

5

ラグのCコードがzooパッケージにあり、パッチはR-forgeソースに適用されていますが、CRANバージョンにはまだ適用されていません。これは約1週間前に修正されました。

zoo(R-forgeから、バージョン番号は同じでもかまいません)のバージョンを更新して、動作するはずです。

+0

応答のおかげで、ジェフ。私はR-forgeからインストールしようとしていますが、何か問題があります。 'install.packages'から** zoo **をインストールしようとすると、' package not found'というエラーが出ます。もしtarballをダウンロードして( 'install.packages'や' R CMD INSTALL'を使って)インストールしようとすると、 'getOc​​t(block、100、8)のエラー:無効な8進数'が表示されます。どのような問題が起こっているのでしょうか? – Matt

+0

さて、Windowsの2.13.1にインストールできたので、間違いなく修正されました。 Linuxの場合、私は更新がCRANにプッシュされるまで待つでしょうし、その時点で** zoo **アップデートが2.12で動作することを願っています。 – Matt

+0

getOc​​tの問題はわかりませんが、zoo_lag関数のローカルコピーでxtsにパッチを当てることができるかどうかがわかります。少なくとも動物園がCRANで更新されるまで。 –

関連する問題