Пакет снегопада: попытка установить атрибут как NULL - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь использовать пакет снегопада для запуска MBLM с моими данными (максимальный растровый стек NDVI).Мне нужен кадр данных с тремя столбцами в качестве выходных данных (Наклон, Перехват, Количество доступных дат на пиксель). Там много пропущенных данных (NA), поэтому я создал функцию, которая возвращает 0 для третьего столбца, если данных нет.

Это функция, которую я использую, где val100 - это определенное количество столбцов моего исходного Val, растрового стека, приведенного к кадру данных, содержащему максимальный NDVI на пиксель за промежуток 30 лет

val = as.data.frame(NDVI.max.masked.184028)
val100 = val[c(1080700:1080737),] # Random selection of data to try and determine where the function isn't working

TREND = function (x) {
  dat = val100[x,]
  print(x)
  names(dat) = paste(substr(names(dat), 19,22))
  add_column(dat, "2012" = NA, .before = "2013")


  if(sum(as.numeric(!is.na(dat[])))==0) {return (c(NA, NA, 0))} else  if (
    sum(as.numeric(!is.na(dat[])))>0 & sum(as.numeric(is.na(dat[])))>0) {
    sumNA = sum(as.numeric(!is.na(dat[])))
    ##FONCTION QUI GARDE COMBIEN DE RASTERS NA
    dat <- dat[-which(is.na(dat[]))]
    dat=data.frame(Year = names(dat), NARI = as.vector(as.numeric(dat)))
    dat$Year = as.numeric(as.character(dat$Year))
    mod <- mblm(NARI ~Year, data=dat)
    return(c(as.numeric(c(mod$coefficients[1], mod$coefficients[2])),sumNA)) } else if (
      sum(as.numeric(!is.na(dat[])))>0 & sum(as.numeric(is.na(dat[])))==0) {
      names(dat) = paste(substr(names(dat), 19,22))
      dat = data.frame(Year= names(dat), NARI = as.vector(as.numeric(dat)))
      dat$Year = as.numeric(as.character(dat$Year))
      mod <- mblm(NARI ~Year, data=dat)
      return(c(as.numeric(c(mod$coefficients[1], mod$coefficients[2])), sumNA)) }
}
## Snowfall package 

Start = Sys.time()
sfInit(cpus=6,type='SOCK',parallel=TRUE)
sfExport("val100",  "TREND")
sfLibrary(mblm)
sfLibrary(tibble)

RES_ARI = sfLapply(1:nrow(val),TREND)
sfStop()
End = Sys.time()
Timetotal = End - Start

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

"Ошибка в checkForRemoteErrors (val): oneузел выдал ошибку: попытка установить атрибут как NULL "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...