在R中迭代for循环中的子目录

时间:2017-07-03 19:41:34

标签: r for-loop r-raster

我有一个包含365个子目录的大型目录,其中包含一年中每一天的图像。我创建了一个我想要应用于这些子目录中的每个图像的函数。目前,这就是我所拥有的:

library(raster)
library(zebu)

#List all of the 365 sub-directories within my main directory
days <- list.files(full.names = F , recursive =F, pattern='*X2000*')

#Apply my function to each directory within "days"
for(j in 1:length(days)){

    named <- paste0("full_",j)

    in.list <- list.files(recursive = T, full.names = F)

    stitched <- mosaicList(in.list)

    writeRaster(stitched, path='D:/Scratch/DataConvert/Daymet_Data/Full/' , 
    filename=named, overwrite=TRUE)
}

这个循环的目标是应用函数&#34; mosaicList&#34;到每个子目录中的图像。问题是,当for循环运行时,对象&#34; in.list&#34;包含与&#34; days&#34;相同的子目录。而不是在子目录中列出图像。结果它尝试同时为每个子目录运行我的函数,我得到错误

Error: cannot allocate vector of size 14.2 Gb 

我是R的新手,所以我不太确定我哪里出错了。有没有人对解决这个问题有任何见解?

1 个答案:

答案 0 :(得分:0)

循环中list.files存在问题:

in.list <- list.files(recursive = T, full.names = F)

list.files的默认路径参数是&#34;。&#34;,这是当前目录。也许改为:

in.list <- list.files(path=days[j], recursive = T, full.names = T)

将修复。