#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)