首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R-读取,然后从二进制img文件列表中提取相同的单元格

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

Stack Overflow用户
提问于 2018-07-06 15:04:59
回答 1查看 35关注 0票数 1

我正在尝试从大约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年冬季所有文件的示例:

代码语言:javascript
复制
w1979s1980 <-  as.vector(list.files(path="SnowDepth/WS1979_1980data", pattern=".img"))`

函数从给定的单元格中提取该列表中所有文件的积雪深度:

代码语言:javascript
复制
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)
}

然后,当我运行给定年份的函数时,可能会将其保存为向量:

代码语言:javascript
复制
Sdepths1978.1979 <- as.vector(cell.depthKotz(w1979s1980))

我应该补充说,我对这一切都非常陌生,甚至知道如何表达我所要求的内容,所以如果我需要编辑标题/问题或添加更多细节,请让我知道。如果你在上面的函数中看到了这种低效,我并不担心运行时,但是如果有明显的变化,这意味着我减少了重复/手动工作,而R增加了自动化工作,请随意这么说。谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2018-07-12 08:04:05

list.files函数中有一个recursive标志。

代码语言:javascript
复制
files <- list.files(path = "src", pattern = "\\.jpg$", recursive = TRUE)

如果您使路径指向父目录。并添加recursive = T标志,您应该是很好的。

您可以选择更改模式,使其以$结尾,说明文件必须以此模式结尾。在极少数情况下,在名为someinfo.img.txt的目录中有另一个文件,这将被忽略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51204778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档