【问题标题】:Dynamic output file name in RR中的动态输出文件名
【发布时间】:2018-09-12 15:12:59
【问题描述】:

我非常接近让我的代码工作,但似乎无法弄清楚如何获得动态文件名。这是我得到的:

require(ncdf)
require(raster)
require(rgdal)

## For multiple files, use a for loop
## Input directory
dir.nc <- 'inputdirectoy'
files.nc <- list.files(dir.nc, full.names = T, recursive = T)

## Output directory
dir.output <- 'outputdirectory'

## For simplicity, I use "i" as the file name, but would like to have a dynamic one
for (i in 1:length(files.nc)) {
  r.nc <- raster(files.nc[i], varname = "precipitation")
  writeRaster(r.nc, paste(dir.output, i, '.tiff', sep = ''), format = 'GTiff', prj = T,  overwrite = T)
}

## END

感谢您的帮助。这么近!!

【问题讨论】:

  • 我觉得你需要paste(dir.output, files.nc[i], '.tiff', sep="")
  • 感谢您的回复。让我看看再回来。
  • 我猜错误不是来自paste 步骤
  • 是 - 抱歉 - 我的意思是向您发送此错误:“ .local(x, filename, ...) 中的错误:尝试将文件写入不存在的路径:C: /Users/rroz/Desktop/TRMM/TRMM TIF/C:/Users/rroz/Desktop/TRMM/TRMM NC"

标签: r loops r-raster


【解决方案1】:

您可以通过不同的方式来执行此操作,但我认为通常最简单的方法是首先创建所有输出文件名(并检查它们是否正确),然后在循环中使用它们。

所以是这样的:

library(raster)
infiles <- list.files('inputpath', full.names=TRUE)
ff <- extension(basename(infiles), '.tif')
outpath <- 'outputpath'    
outfiles <- file.path(outpath, ff)

为确保您正在写入现有文件夹,您可以先创建它。

dir.create(outpath, showWarnings=FALSE, recursive=TRUE)

然后遍历文件

for (i in 1:length(infiles)) {
  r  <- raster(infiles[i])
  writeRaster(r, paste(outfiles[i],  overwrite = TRUE)
}

你也可以按照这些思路使用一些东西

outfiles <- gsub('in', 'out', infiles) 

【讨论】:

    【解决方案2】:

    下面是最终成功的代码:

    # Imports
    library(raster)
    
    #Set source file
    infiles <- list.files('infilepath', full.names=TRUE)
    
    #create dynamic file names and choose outfiles to view list
    ff <- extension(basename(infiles), '.tif')
    outpath <- 'outfilepath'    
    outfiles <- file.path(outpath, ff)
    
    #run da loop
    for (i in 1:length(infiles)) {
      r  <- raster(infiles[i])
      writeRaster(r, paste(outfiles[i]), format ='GTiff', overwrite = T)
    }
    
    ## END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多