【发布时间】:2024-04-28 22:25:01
【问题描述】:
我在 R 中围绕 GDAL 编写了一个非常简单的包装器。它利用预先编写的语句传递给系统,创建一个输出,然后我想再次将其读入 R 环境。
它的工作原理是在工作目录中创建一个临时目录,打印出我们感兴趣区域的 ESRI 形状文件,然后通过此切割光栅,并带有一些预设信息。
我的问题:成功运行 system() 调用并创建输出文件后,函数停止。它不会执行下一次调用并将输出读入 R 环境。
gdalwarpwarp <- function(source_file, source_srs, newfilename, reread=TRUE, clean=TRUE, cutline){
#Create tempfolder if it doesn't exist in the working directory.
if (!dir.exists("./tempfolder")){
dir.create("./tempfolder")
}
#Write temporary shape file
terra::writeVector(cutline, filename = "./tempfolder/outline_AOI.shp" , filetype='ESRI Shapefile',overwrite=TRUE)
#Warp!
if(reread==FALSE){
system(paste0("gdalwarp -cutline ./tempfolder/outline_AOI.shp -dstnodata -9999 -s_srs EPSG:3006 ",source_file, " ",paste0("./tempfolder/",newfilename)))
message('warp warped TRUE')
} else if(reread==TRUE){
system(paste0("gdalwarp -cutline ./tempfolder/outline_AOI.shp -dstnodata -9999 -s_srs EPSG:3006 ",source_file, " ",paste0("./tempfolder/",newfilename)))
newfilename <- terra::rast(paste0("./tempfolder/",newfilename))
}
}
这不会运行:
newfilename <- terra::rast(paste0("./tempfolder/",newfilename))
【问题讨论】:
-
不需要
if(reread==TRUE)部分,您已经拥有else。 -
你怎么知道该行没有被执行? R 函数应始终具有明确的返回值。你的没有。
-
我可以看到在temp文件夹中创建了输出.tif文件,但它没有再次读入R环境。我可以选择吗?返回(新文件名)?或返回(消息(“完成”))
-
现在我明白了!环境被废弃而不返回我的输出。谢谢!我会删除这个问题以避免混淆。