Я пытаюсь использовать пакет снегопада для запуска 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 "