将栅格函数应用于子文件夹中的文件
Applying raster function to files within subfolders
我正在尝试通过分为文件夹的 GeoTIFF 文件应用 R 程序光栅中的一个简单函数。
我的文件组织在名为 'GeoTIFFs' 的文件夹中,子文件夹名为 'a1'、'a2'...等。我的目标是遍历每个文件,并将 GeoTIFFs 文件夹中每个 .tif 文件的所有栅格值 3 更改为 1。
这是我目前编写的一些代码。它有很多问题。
我知道我应该提供示例数据,但我不知道如何在文件夹中模拟光栅文件,这是我问题的本质。
library(raster)
files = dir('./GeoTIFFs', pattern = '.tif', recursive = TRUE, full.names = TRUE))
nr <- vector("list", length(files))
names(nr) <- files
for (i in 1:length(files)) {
tmp <- raster(files[i])
df <- data.frame(id=3, v=1)
nr[[i]] <- subs(tmp, df, subsWithNA=FALSE)}
此代码成功导入了我的所有文件 (n=370),但它立即停止在 for
循环并出现此错误:
Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", :
Cannot create a RasterLayer object from this file. (file does not exist)
我很确定这是因为 R 认为文件名是 'a1/geotiff_example.tif'
而不是 'geotiff_example.tif'
。我还认为其余的代码可能不起作用(替换函数除外,它应该),所以我很乐意就如何完成这个(可以说非常简单的)任务提出建议。非常感谢。
您的文件没有包含 GeoTIFFs
部分的完整路径:
> files = dir('./GeoTIFFs', pattern = '.tif')
> files
[1] "bar.tif" "foo.tif"
使用full.names=TRUE
:
> files = dir('./GeoTIFFs', pattern = '.tif', full.names=TRUE)
> files
[1] "./GeoTIFFs/bar.tif" "./GeoTIFFs/foo.tif"
>
使用完整路径将 tif 加载到光栅中。
如果你想获取路径的最后一个文件名部分(如果我没看错你的代码,这就是你命名列表的方式)然后使用 basename
:
> basename(files)
[1] "bar.tif" "foo.tif"
我正在尝试通过分为文件夹的 GeoTIFF 文件应用 R 程序光栅中的一个简单函数。
我的文件组织在名为 'GeoTIFFs' 的文件夹中,子文件夹名为 'a1'、'a2'...等。我的目标是遍历每个文件,并将 GeoTIFFs 文件夹中每个 .tif 文件的所有栅格值 3 更改为 1。
这是我目前编写的一些代码。它有很多问题。
我知道我应该提供示例数据,但我不知道如何在文件夹中模拟光栅文件,这是我问题的本质。
library(raster)
files = dir('./GeoTIFFs', pattern = '.tif', recursive = TRUE, full.names = TRUE))
nr <- vector("list", length(files))
names(nr) <- files
for (i in 1:length(files)) {
tmp <- raster(files[i])
df <- data.frame(id=3, v=1)
nr[[i]] <- subs(tmp, df, subsWithNA=FALSE)}
此代码成功导入了我的所有文件 (n=370),但它立即停止在 for
循环并出现此错误:
Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", :
Cannot create a RasterLayer object from this file. (file does not exist)
我很确定这是因为 R 认为文件名是 'a1/geotiff_example.tif'
而不是 'geotiff_example.tif'
。我还认为其余的代码可能不起作用(替换函数除外,它应该),所以我很乐意就如何完成这个(可以说非常简单的)任务提出建议。非常感谢。
您的文件没有包含 GeoTIFFs
部分的完整路径:
> files = dir('./GeoTIFFs', pattern = '.tif')
> files
[1] "bar.tif" "foo.tif"
使用full.names=TRUE
:
> files = dir('./GeoTIFFs', pattern = '.tif', full.names=TRUE)
> files
[1] "./GeoTIFFs/bar.tif" "./GeoTIFFs/foo.tif"
>
使用完整路径将 tif 加载到光栅中。
如果你想获取路径的最后一个文件名部分(如果我没看错你的代码,这就是你命名列表的方式)然后使用 basename
:
> basename(files)
[1] "bar.tif" "foo.tif"