You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:43:19