为什么R不能识别列和行,因为它们应该是?

下面给出的代码是提取一个区域的值并将其写入文本文件(目录中有365个二进制文件)。 我面临的问题是我所有的文件都是二进制文件,大小为360行,720列。 我在这一行中指出:

file2 <- matrix(data=file,ncol=720,nrow=360) 

但我得到一个错误:

平均值错误(file2 [X,Y],na.rm = TRUE):下标越界。

然后我重写了上面的行:

file2 <- matrix(data=file,ncol=360,nrow=720)

我把ncol = 360和nrows = 720这是不对的。但是,这工作,我没有得到任何错误。但是,结果并不正确。

X <- c(364:369) ;   Y <- c(82:92) #####   for sellected region
extract <- vector()
dir1 <- list.files("C:\\Users\\Climate_Rad_f_GAMMA_%d.img", full.names = TRUE)
listfile<-dir1()
for (i in c(1:365))
{
    conne <-  file(listfile[i], "rb")
    file <-  readBin(conne, double(), size=4,  n=720*360, signed=T)
    file2 <-  matrix(data=file,ncol=720,nrow=360)  
extract[i] <- mean(file2[X,Y],na.rm=TRUE)
    close(conne)
    write.table(extract,"C:\\Users\\sam.txt")
}
0
额外 编辑
意见: 1
这个问题的读者应该知道它是今天在r-help上交叉发布的,并且显然已经得到了回答:关键在于二进制文件需要被正确读取并且x索引364:369导致R的行,列顺序为“[”访问抛出错误。
额外 作者 42-,
你不能更好地格式化代码吗?
额外 作者 betabandido,
我试图挽救这个问题,但是我必须对你的一些代码进行一些有教育的猜测。请检查它以确保它反映了您的问题。
额外 作者 joran,
如果OP愿意在r-help的回答中作为答案,这将是一件好事。
额外 作者 Ben Bolker,

1 答案

在这个代码中:

mean(file2[X,Y],na.rm=TRUE)

您正在选择X行和Y列。您只有360行。你可能需要这个:

mean(file2[Y,X],na.rm=TRUE)
0
额外
谢谢。我已经这么做了。我认为我的问题是数据是由C ++生成的float32.I在这里将它们定义为double。 R只有整数,双精度,真实的。任何人都可以知道其中哪些表示float32。
额外 作者 Sami Yemein,