R 执行使用空间点提取时间序列值的函数时出错消息

R 执行使用空间点提取时间序列值的函数时出错消息,r,list,raster,R,List,Raster,我有一个函数来提取点路径的timeseries光栅值。到目前为止,这一切都很顺利;然而,我今天在尝试使用它时不断收到错误。我收到的错误是: UseMethod(“extract_”)中的错误:没有适用于 “提取”应用于“c”类对象(“光栅层”、“光栅”, “BasicRaster”) 你能帮忙吗。我已经尝试了很多,但我无法解决这个问题 library(raster) #--------------------------------------start myfunction----------

我有一个函数来提取点路径的timeseries光栅值。到目前为止,这一切都很顺利;然而,我今天在尝试使用它时不断收到错误。我收到的错误是:

UseMethod(“extract_”)中的错误:没有适用于 “提取”应用于“c”类对象(“光栅层”、“光栅”, “BasicRaster”)

你能帮忙吗。我已经尝试了很多,但我无法解决这个问题

library(raster)
#--------------------------------------start myfunction-----------------------------

# extract raster values for each single point in each path and put it a dataframe
lst <- function (rstack.lst, points, df.name, IDstr){
  df.name <- list()
  ii <- 1
  #number of layers in a list of raster stacks
  n = Reduce(`+`, lapply(rstack.lst, nlayers))

  for (j in 1:length(rstack.lst)){
    df.name[[j]] <- as.data.frame(matrix(0, ncol = nlayers(rstack.lst[[j]])+3, nrow = nrow(points)))
    names(df.name[[j]]) <- append(c("coords.x","coords.y","ID"), substr(names(rstack.lst[[j]]),5,14), after = 3)
    #calculating x and y coordinates
    df.name[[j]][1:2] <- coordinates(points) 
    # setting up unique IDs 
    df.name[[j]]$ID <- paste0(IDstr, ".",seq(1:(nrow(df.name[[j]])))) 

    for (i in 1:nlayers(rstack.lst[[j]])){
      df.name[[j]][i+3] <- extract(rstack.lst[[j]][[i]], points)
      colnames(df.name[[j]][i+3]) <- substr(names(rstack.lst[[j]][[i]]),5,14)
      cat(paste0(round((ii/(n))*100), '% completed'))
      ii <- ii+1
      Sys.sleep(.05)
      if (ii == n) cat(': Done')
      else cat('\014')
    }

  }
  return(df.name)
}
#--------------------------------------end start myfunction-----------------------------

lsdata[[1]] <- lst(rstack.lst=r.lst, points=Pnt.shp, IDstr="P1")
库(光栅)
#--------------------------------------启动myfunction-----------------------------
#为每个路径中的每个单点提取光栅值,并将其放在数据帧中

lst我可能错了,但我认为
extract
函数没有出现故障,但您可能正在加载其他一些具有完全相同函数(我指的是相同名称)的包。有许多软件包可能具有同名的函数。例如,
extract
也是
tidyr
中的一个函数。为了避免此类问题,我建议您在指定函数时也添加包名。您可以在这里执行:
graster::extract

要确保这一点,只需执行
extract
并仔细检查它包含的内容。无论它包含什么,可能都不是如下所示:

function (x, y, ...) 
standardGeneric("extract")
<bytecode: 0x000000001873c4d0>
<environment: 0x000000001855db68>
Methods may be defined for arguments: x, y
Use  showMethods("extract")  for currently available ones.
函数(x,y,…)
标准通用(“摘录”)
可以为参数定义方法:x,y
对当前可用的方法使用showMethods(“提取”)。

看起来您的函数使用了错误的
提取
函数。尝试重新加载包或添加
光栅::
以提取。另外,这只是一个不请自来的善意提示:如果在R中有嵌套循环,那么函数的效率可能会更高。