r - 我有 163 个光栅文件想要使用 for 循环聚合从 50 公里到 100 公里的分辨率。请指导我。谢谢
问题描述
library(raster)
library(stringr)
setwd("file.choose")
tws50km =list.files(pattern=".tif",full.names = F)
time_list <- str_sub(gsub("-", "", seq(as.Date("2002/4/1"), by = "month", length.out = 163)), 1,6)
for (i in 1:length(tws50km)){
tws100km = aggregate(i, fact = 2, fun = mean)
writeRaster(tws100km,paste('tws_',time_list[i], ".tif", sep = " "), "GTiff", overwrite=TRUE)
}
match.fun(FUN) 中的错误:缺少参数“FUN”,没有默认值
解决方案
它应该是这样的
library(raster)
inf <- list.files(pattern=".tif",full.names = F)
如下所示,一步一步制作所有输出文件名是最简单的。但是你所做的看起来并不好。你怎么知道你使用了正确的文件名,它们与数据匹配?您通常会inf
以某种方式更改输入文件名。但是我无法改进您的方法,因为您没有显示任何输入文件名。
outf <- substr(gsub("-", "", seq(as.Date("2002/4/1"), by="month", length.out=163)), 1,6)
# use paste0, avoid spaces in filenames
outf <- paste0('tws_', outf, ".tif")
outf[1:2]
#[1] "tws_200204.tif" "tws_200205.tif"
现在循环。首先使用光栅创建一个 RasterLayer(或者brick
如果有多个图层则使用),然后聚合该对象(您不能聚合文件名!)。不需要writeRaster
as 聚合有它自己的filename
论点。
for (i in 1:length(inf)) {
r <- raster(inf[i])
x <- aggregate(r, fact=2, fun=mean, filename=outf[i], overwrite=TRUE)
}
推荐阅读
- yarnpkg - gyp动词`which`失败错误:未找到:python2 for yarn add node-sass命令
- php - 在 codeigniter 3.0 中使用 flexigrid 加载数据时出现问题
- c++ - 获取在 C++ 中一段时间内创建的文件路径列表
- sql - 返回具有特定十六进制的行的查询
- rpm - RPM 无法在 RHEL 上安装
- javascript - 如何获得反应返回元素的长度?
- javascript - chrome.runtime.onMessage 不存在
- javascript - 在 promise.then 中使用 async/await
- angular - 无法启动事件 onCreateConfirm 和 onEditConfirm
- wallet - Apple 钱包通行证类型 ID