проблема в функции dm2seasonal в R

#r #list #lapply #zoo

#r #Список #lapply #зоопарк

Вопрос:

Я пытаюсь рассчитать совокупное количество осадков по сезонам в R, используя функцию dm2seasonal . В качестве примера, это str первый элемент в моем списке станций зоопарка с ежедневными осадками :

(Я не включил, например dput(listDF_zoo[[1]]) , ограничение на количество символов)

 > str(listDF_zoo[[1]])
‘zoo’ series from 1915-11-01 to 1945-11-01
  Data: num [1:9382] 0 0 0 0 0 18.5 9.4 0 0 10.4 ...
  Index:  Date[1:9382], format: "1915-11-01" "1915-11-02" "1915-11-03" "1915-11-04" "1915-11-05" "1915-11-06" "1915-11-07" ...
  

Я использую следующий код:

 #Cumulative precipitation in spring (March 1 to May 31)
SpringCumMean <- lapply(listDF_zoo,function(x){dm2seasonal(x, season ="MAM", FUN=sum)})
  

но я получил следующую ошибку:

 > SpringCumMean <- lapply(listDF_zoo,function(x){dm2seasonal(x, season ="MAM", FUN=sum)})
 Show Traceback
 
 Rerun with Debug
 Error in aggregate.data.frame(as.data.frame(x), ...) : 
  no rows to aggregate In addition: Warning message:
In extract.zoo(x = x, trgt = season) :
  There were no elements of 'x' within 'trgt'
  

и я не понимаю, почему говорится, что элемент не имеет строк…

Есть решение?

Комментарии:

1. Пожалуйста, покажите неполный,, единственный вызов dm2seasonal , который работает. Метод, по-видимому, зависит от aggregate того, что может вернуться no rows to aggregate из-за пропущенных наблюдений.

2. Я знаю, что получил ошибку в элементе 46 списка. Можно ли пропустить ошибку в цикле, чтобы избежать остановки цикла?

Ответ №1:

Поскольку данные, по-видимому, зависят от данных для одного элемента в списке, подумайте tryCatch , куда вы условно возвращаете NULL (или любой другой объект или значение) в экземплярах ошибок.

 SpringCumMean <- lapply(listDF_zoo,function(x) {
                         tryCatch({
                              dm2seasonal(x, season ="MAM", FUN=sum)
                         }, error = function(e) NULL)
                 })
  

И если вам нужно отфильтровать NULL элементы, подумайте Filter . Но при этом SpringCumMean больше не будет поддерживать равную длину listDF_zoo .

 SpringCumMean <- Filter(length, SpringCumMean)