コンピュータ設定悪戦苦闘メモ

困ったこととその解決策のメモ.万人に有効なことは保証できませんが,お役に立てればうれしいな.

10.Rで二度ハマったことの備忘録

《状況》

 並列処理の結果を格納したら,数値なのにlist形式になってしまう.

 

《エラーになったコマンド》

parallelsvm<-pforeach(i=1:5,.combine='rbind') ({
 model<-ksvm(V387~.,data=acoustic[,c(i,ncol(acoustic))],cross=10)
 tot.accuracy<-1-model@cross
 return(c(i,tot.accuracy))
}) #/pforeach

max(parallelsvm[,2])

 

《エラーメッセージ》

max(parallelsvm[, 2]) でエラー:  引数 'type' (list) が不正です

 

《原因》

この例では,ksvmでエラーが起きていて,その結果,本来数値が入るべきtot.accuracyにエラーメッセージが混入してしまっていた.そのため,そのエラーメッセージを格納するために本来想定している形式のnumericからlistに変わってしまっていた.

 

《データの中身を表示してみると…》

parallelsvm[,2]
>result.1 1                                       0.1760769
>result.2 2                                       0.1774402
>result.3 3                                       0.1651925
>result.4 " TRUE/FALSE が必要なところが欠損値です " Expression
>result.5 5                                       0.1638431

 

《対応》

ksvmがエラー出ないようにしただけです.

 

《感想》

 pforeachの仕様が変わったのかとか,.combineの設定が悪いのかとか,model@crossを使った演算をするとnumericじゃなくなるのかとか,一度listになったらプログラム修正してもその影響がずっと残るのかとか,どうしようもなければlistの中身を参照してmaxを計算するスクリプトを書くべきなのかとか,いろいろいろいろ試行錯誤したのに,まさかの結果でした.

以前も同じことでハマったので,どこかにメモしたつもりだったんだけどなぁ.