Сообщение об ошибке при выполнении функции для извлечения значений временного ряда с использованием пространственных точек - PullRequest
1 голос
/ 30 апреля 2019

У меня есть функция для извлечения значений растра временных рядов для пути точек. Это работало прекрасно до сих пор; однако я постоянно получаю сообщение об ошибке, пытаясь использовать его сегодня. Я получаю сообщение об ошибке:

Ошибка в UseMethod ("extract_"): нет применимого метода для 'extract_' применен к объекту класса "c ('RasterLayer', 'Raster', '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")

1 Ответ

2 голосов
/ 30 апреля 2019

Я могу ошибаться, но я думаю, что функция extract не работает со сбоями, но вы, вероятно, загружаете некоторые другие пакеты точно такой же функцией (я имел в виду с тем же именем). Есть много пакетов, которые могут иметь функцию с с таким же именем . Например, extract также является функцией в tidyr. Чтобы избежать подобных проблем, я предлагаю вам также добавить имя пакета при указании функции. Здесь вы можете сделать: raster::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.
...