【问题标题】:Applying a dataframe function to raster brick将数据框功能应用于栅格砖
【发布时间】:2018-09-12 21:45:39
【问题描述】:
我正在使用音乐包,用于缩小气候预测

例如,musica 库有一组旨在应用于数据帧的函数, 但我想将它应用到我的光栅堆栈中,并且该函数需要像这样的参数,

dec = decomp(basin_PT$obs_ctrl, period = c('Y5', 'Y1', 'M6', 'M3', 'M1', 'D20'))

其中 obs_ctrl 是一个具有 3 个变量的 data.table:日期(日期对象 1980-2005)、pr(降雨值向量)和 ts(温度值向量)。 应用于光栅砖 我首先创建我的日期对象,

cal <- "365_day"
origin <- "1980-01-01"
origin.pcict <- as.PCICt(origin, cal)
seconds.per.day <- 86400
ts.dat.days <- 0:1989
ts.dat.pcict <- origin.pcict + (ts.dat.days * seconds.per.day)
#convert the object to POSIXlt
dtm<-as.POSIXlt(ts.dat.pcict)

然后,创建光栅砖, 我有 94​​90 层的栅格砖(每日网格化降雨数据), 这是一个光栅砖

#####加载所需的包######### 图书馆(音乐) 库(数据表) 图书馆(润滑) 图书馆(光栅) 图书馆(PCICt)

pr_files= list.files(ipath,pattern='.asc')
rrr<- stack(pr_files)

而且,对栅格的反压缩函数,

rse <- function(dtm, rrr ,period = c('Y5', 'Y1', 'M6', 'M3', 'M1', 'D20')){
  musica::decomp(dtm, pr,period)
  }

应用函数时

c <- raster::overlay(rrr, dtm, fun = rse)

,我收到以下错误,

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘overlay’ for signature ‘"RasterStack", "POSIXlt"’

是否有将数据框功能应用于栅格砖? 感谢您的帮助

【问题讨论】:

    标签: r


    【解决方案1】:

    您需要提供一些简单的示例数据(使用一些代码创建,在线和光栅帮助文件中有大量示例,例如在?overlay 中),以便您的代码可以运行,我们可以回答您的问题。

    这个函数看起来很奇怪

    rse <- function(dtm, rrr ,period = c('Y5', 'Y1', 'M6', 'M3', 'M1', 'D20')){
      musica::decomp(dtm, pr,period)
    }
    

    有一个未使用的参数rrr。应该是pr

    你也可以离开 dtm 去做

    rse <- function(pr, period = c('Y5', 'Y1', 'M6', 'M3', 'M1', 'D20')){
      musica::decomp(dtm, pr, period)
    }
    
    r <- raster::overlay(rrr, fun = rse)
    

    overlay 会在你的全局环境中找到dtm。

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 2018-06-14
      • 2020-07-26
      • 2018-07-17
      • 1970-01-01
      相关资源
      最近更新 更多