如何在一个文件夹中循环浏览多个文件?

时间:2012-04-25 17:40:17

标签: r binary

下面给出的R代码用于对一个文件夹中的许多文件(12)执行计算。但是我收到了这个错误:

  

错误:下标越界。

它读完了第一个文件,但是当它开始读取下一个文件时出现了错误。有什么建议吗?

library(Matrix)
setwd("C:\\Users\\Desktop\\img")
listfile <- dir()
long <- file("C:\\Users\\Desktop\\New folder (5)\\vfd.bin", "rb")
A = readBin(long, integer(), size=2,n=67420*1, signed=F)
ta <- t(A)
lot <- file("C:\\Users\\Desktop\\New folder (5)\\lat.img", "rb")
B = readBin(lot, integer(), size=2,n=67420*1, signed=F)
tb <-t (B)

for (n in 1:length(listfile))
{
    h = listfile[n]
    b = file.info(h[n])$size/67420/4
    wind <- file(h, "rb")
    C = readBin(wind, double(), size=4,n=67420*b, signed=TRUE)
    D <- matrix(C,nrow=b,ncol=67420)
    for(d in 1:b)
    {
        M <- Matrix(-9999, 360, 720)
        tm <- t(M)
        for(i in 1:67420)
        {
            tm[ta[i],tb[i]] = round(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:\\Users\\Desktop\\New folder (6)\\Yar_%00d.bin", d)
        writeBin(as.integer(tm@x), size=2,to.write)
    }
}

1 个答案:

答案 0 :(得分:0)

该错误的含义是您试图访问其边界之外的向量元素。

问题出在这段代码中(for循环初始化后的前两行):

h = listfile[n]
b = file.info(h[n])$size/67420/4

要消除错误,您应该将b = file.info(h[n])替换为b = file.info(h)

这是因为n = 1(循环的第一次迭代)h等于第一个图像文件名(它是长度为1的矢量值,事实上的标量)和{{1} }等于h[1]。第一次迭代看起来一切正常。

但是在第二次迭代(hn = 2等于第二个图像文件名(长度为1的标量),但是您正在尝试访问1长度向量的第二个元素。因此,第二次迭代的h值将为b,并且在代码中进一步将引发错误。

相关问题