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
,因为聚合具有自己的filename
参数。
for (i in 1:length(inf)) {
r <- raster(inf[i])
x <- aggregate(r, fact=2, fun=mean, filename=outf[i], overwrite=TRUE)
}
library(raster)
library(stringr)
setwd("file.choose")
tws50km =list.files(pattern=".tif",full.names = F)
我确实在此处和循环中都将time_list
更改为time_month
,因为将来您会想知道这是一个字符向量,[
,而不是[[
访问的列表
time_month <- str_sub(gsub("-", "", seq(as.Date("2002/4/1"), by = "month", length.out = 163)), 1,6)
所以只复制您的for循环并思考[i]
:
for (i in 1:length(tws50km)){
tws100km[i] = aggregate(tws50km[i], fact = 2, fun = mean)
writeRaster(tws100km[i],paste('tws_',time_month[i], ".tif", sep = " "), "GTiff", overwrite=TRUE)
}
并且希望这样做。