2012-04-27 7 views
3

誰でもこのエラーが表示される理由を教えてください。
Error in as.integer(tm) : cannot coerce type 'S4' to vector of type 'integer
私はインターネットを検索していますが、問題を解決できませんでした。なぜ型 'S4'を型 '整数'のベクトルに変換できないのですか?

 library(Matrix) 
    long <- file("C:\\New folder (5)\\inra.bin", "rb") 
    A=readBin(long, integer(), size=2,n=67420*1, signed=F) 
    ta<-t(A) 
    lot <- file("C:\\New folder (5)\\lat.img", "rb") 
    B=readBin(lot, integer(), size=2,n=67420*1, signed=F) 
    tb<-t(B) 
     wind <- file("C:\\Wind_WFD_200201.bin", "rb") 
     C=readBin(wind, double(), size=4,n=67420*248, signed=TRUE) 
     D<-matrix(C,nrow=248,ncol=67420) 
     for(d in 1:31) 
     { 
     M <- Matrix(-9999, 360, 720) 
     tm<-t(M) 
     for(i in 1:67420) 
     { 
    tm[ta[i],tb[i]]= 10 * ((D[(d-1)*8+1,i] + D[(d-1)*8+2,i] +D[(d-1)*8+3,i] +D[(d- 1)*8+4,i] +D[(d-1)*8+5,i] +D[(d-1)*8+6,i] +D[(d-1)*8+7,i] +D[(d-1)*8+8,i])/8) 

}###gooooooood 
to.write <- sprintf("C:\\Yar_%0d.bin", d) 
writeBin(as.integer(tm), size=2,to.write) 

}

答えて

2

How to split and write to a file for S4 object in Rを見てみましょう。あなたの場合、MatrixはS4オブジェクトを返します。これを試してみてください:

あなた tmオブジェクトから抽出したいものについての示唆を与える可能性があり

foo <- Matrix(10,10,10) 
slotnames(foo) 

なぜ、最初に Matrixを使用していますか? base::matrixを使用している場合、この問題は消えるはずです。 編集: Matrix,のドキュメントを参照すると、 as.integerはサポートされていません。最初に as(x,matrix)を使用する必要があります。

+0

これは解決されました。上記のコードは1つのフォルダ内の1つのファイルの計算を行います。残りのすべてのファイルについて同じことを続けるようにRに指示することはできますか。 –

+0

@SamYemein最も簡単な方法は、 'long < - file(" C:\\ New folder(5)\\ inra.bin "、" rb ")'ステートメントの周りにループを構築し、配列からフォルダパスを構築することですファイル名の(i:1:10){filename < - paste( 'C:\\新しいフォルダ(5)\\'、 'filearray [i]'、sep = '')のようなものです。長い<-file(filename、 'rb'); {その他すべて}} ' –

関連する問題