почему нельзя принудить тип «S4» к вектору типа «целое число»?

Кто-нибудь может сказать мне, почему я получаю эту ошибку:
Error in as.integer(tm) : cannot coerce type 'S4' to vector of type 'integer?
Я искал в Интернете, но не смог решить свою проблему.

      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)

}


r s4
person Sami Yemein    schedule 27.04.2012    source источник


Ответы (1)


Взгляните на Как разделить и записать в файл для объекта S4 в R . В вашем случае кажется, что Matrix возвращает объект S4. Попробуй это:

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

Это может подсказать, что вы хотите извлечь из объекта tm.
Но почему вы вообще используете Matrix? Если вы просто используете base::matrix, эта проблема должна исчезнуть. Изменить: просмотрев документацию для пакета Matrix,, становится ясно, что as.integer не поддерживается. Вероятно, сначала вам придется использовать as(x,matrix).

person Carl Witthoft    schedule 27.04.2012
comment
Большое спасибо. Это было решено. Приведенный выше код будет выполнять вычисления для одного файла в одной папке. Как я могу сказать R, чтобы он продолжал делать то же самое со всеми остальными файлами в этой папке. - person Sami Yemein; 27.04.2012
comment
@SamiYemein Самый простой способ - построить цикл вокруг вашего оператора long <- file("C:\\New folder (5)\\inra.bin", "rb") и построить путь к папке из массива имен файлов. Что-то вроде for (i in 1:10) { filename <- paste('C:\\New folder (5)\\','filearray[i]',sep='') ; long<-file(filename,'rb');{everything else} } - person Carl Witthoft; 27.04.2012