R语言calc函数报错:无法匹配RasterStack/RasterLayer方法
R语言栅格处理报错:calc函数无法匹配RasterStack签名
我用R处理3年1-2月的日分辨率海洋气候栅格数据,循环读取.nc文件转为RasterStack后,用calc计算图层均值。昨天代码正常运行,今天突然报错:
Error in (function (classes, fdef, mtable): unable to find an inherited method for function 'calc' for signature "RasterStack", "RasterLayer"
数据量超50GB无法提供,核心代码片段如下:
for(file in nc_files){ rast <- raster::raster(x = paste("./Data/Raw/Phy/", file, sep=""), varname = var) rast <- raster::resample(x = rast, y = r) stack <- raster::addLayer(stack, rast) } mean_r <- calc(stack, fun = mean) sd_r <- calc(stack, fun = sd)
我没修改脚本、文件,也没更新包,完全搞不懂报错原因。
正常运行的代码块
第一段代码里calc完全没问题,代码如下:
nc_varname <- c("thetao", "so", "mlotst", "uo", "vo") ## Climato de surface ---- nc_files <- list.files(path = "./Data/Raw/Phy/", pattern = ".nc") r <- raster(xmn=40, xmx=90, ymn=-60, ymx=-20, resolution = 0.08333333) for(var in nc_varname){ stack <- r stack_grad <- r for(file in nc_files){ rast <- raster::raster(x = paste("./Data/Raw/Phy/", file, sep=""), varname = var) rast <- raster::resample(x = rast, y = r) stack <- raster::addLayer(stack, rast) grad <- grec::getGradients(x = rast, method = "BelkinOReilly2009") stack_grad <- addLayer(stack_grad, grad) } # Writing raw data stack writeRaster(x = stack, filename = paste("./Data/Treated/Phy/", var, " stack", sep=""), format = "raster", overwrite = T) # Mean print(class(stack)) mean_r <- calc(stack, fun = mean) writeRaster(x = mean_r, filename = paste("./Data/Treated/Phy/", var, " mean raster", sep=""), format = "raster", overwrite = T) }
这段代码把.nc文件转成RasterLayer并添加到RasterStack,用calc计算均值等指标完全正常。
报错的代码块
但运行下面计算月均值的代码时,哪怕stack仍是RasterStack对象,calc依然报错:
## Raster par année et par mois ---- nc_files <- list.files(path = "./Data/Raw/Phy/", pattern = ".nc") r <- raster(xmn=40, xmx=90, ymn=-60, ymx=-20, resolution = 0.08333333) nc_varname <- c("thetao", "so", "uo", "vo") prof <- c("0.49", "186") prof_name <- c("0m", "200m") years <- c("2017", "2018", "2019") months <- c("janv", "fev") for(var in nc_varname){ stack <- r stack_grad <- r for(year in years){ file_list <- nc_files[grep(pattern = year, x = nc_files)] for(month in months){ file_list <- file_list[grep(pattern = month, x = file_list)] for(p in prof){ for(file in file_list){ rast <- brick(x = paste("./Data/Raw/Phy/", file, sep=""), varname = var) rast <- rast[[grep(pattern = p, names(rast))]] rast <- raster::resample(x = rast, y = r) stack <- raster::addLayer(stack, rast) grad <- grec::getGradients(x = rast, method = "BelkinOReilly2009") stack_grad <- addLayer(stack_grad, grad) print(length(names(stack_grad))) } writeRaster(x = stack, filename = paste("./Data/Treated/Phy/", var, " ", year, " ", month, " ", prof_name[grep(pattern = p, x = prof)], " raster layers", sep=""), format = "raster", overwrite = T) # Mean mean <- calc(stack, fun = mean) writeRaster(x = mean, filename = paste("./Data/Treated/Phy/", var, " ", year, " ", month, "", prof_name[grep(pattern = p, x = prof)], " mean raster", sep=""), format = "raster", overwrite = T) } } } }
额外现象
更奇怪的是,运行完这段报错的代码后,再跑之前正常的第一段代码,也会出现同样的calc报错。有没有人遇到过类似问题?
内容的提问来源于stack exchange,提问作者Valentin Djian
相关产品推荐
相关产品推荐

