R –读入然后从二进制img文件列表中提取相同的单元格

时间:2018-07-06 07:04:59

标签: r

我正试图从〜14000个img文件中提取同一[i,j]单元格的值。我已经设置了一个工作函数,可以对较小的批次执行此操作,可以将文件放在目录中,但是现在,我准备查看被卡住的较大数据集。 img文件按年份组织,每个38个冬季中有365个单独的文件。每个冬天都有自己的文件夹(WS1978_1979data,WS1979_1980data等),每天都有自己的文件,其中包含北极大卫星网格的雪深数据(ssmi_n_snowdepth_5day_1978307.img,ssmi_n_snowdepth_5day_1978308.img等),从10月1日开始,持续到第二年的9月30日。我的最终希望(至少对于此阶段而言)是为目标单元创建一个365个雪深的向量,并在数据集中每年进行一次。

我可以指定适当的文件路径来生成给定年份所需文件的列表,但是当我使用函数提取所需的特定单元格时,它将在目录中查找该文件,即错误。你能帮我吗?我觉得我一定想念一些简单的东西,但是我找不到我需要的东西。

列出1979-1980年冬季所有文件的示例:

w1979s1980 <-  as.vector(list.files(path="SnowDepth/WS1979_1980data", pattern=".img"))`

用于从给定单元格中提取列表中所有文件的降雪深度的功能:

cell.depthKotz <- function(depthfile){
  depth.val <- c()
  for(i in 1:length(depthfile)) {
  depth.mat <- matrix(readBin(depthfile[i], what="integer", n=136192, size=2, endian="little"), 
                      nrow=448, ncol=304, byrow=TRUE)
  depth.val[i] <- depth.mat[187,65]
  depth.val[depth.val == 110] <- NA
  depth.val[depth.val == 120] <- NA
  depth.val[depth.val == 130] <- NA
  depth.val[depth.val == 140] <- NA
  depth.val[depth.val == 150] <- NA
  depth.val[depth.val == 160] <- NA
  }  
  return(depth.val)
}

然后在运行给定年份的函数时将其保存为向量:

Sdepths1978.1979 <- as.vector(cell.depthKotz(w1979s1980))

我还要补充一点,就是即使我不知道该如何表达我的要求,我还是所有新手,所以请告诉我是否需要编辑标题/问题或添加更多详细信息。如果您发现上述功能的效率低下,我并不担心运行时,但是如果进行了明显的更改,这意味着我减少了重复/手动的工作,而R则进行了更多的自动化工作,请随意说。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="ViewActivitydiv">test</div>函数中有一个recursive标志。

list.files

如果将路径指向父目录。并添加files <- list.files(path = "src", pattern = "\\.jpg$", recursive = TRUE) 标志,您应该会很好。

(可选)您可以将模式更改为以recursive = T结尾,表明文件必须以该模式结尾。在极少数情况下,在目录$中还有另一个文件,将被忽略。