Спасибо @ ran2.Я работал над вашим предложением и сумел решить проблему, но довольно неэкранировано.Прежде всего, я не смог заставить ни одну из функций «применить семейство» правильно работать с объектом xts, поддерживая его структуру.Простое применение с применением (x, MARGIN = 2, ..) для приложения по столбцам показало обещание, но остановилось в операторе 'coredata'.и т. д. дали искаженные списки.
Затем я пошел в цикл.Но поскольку x <-na.omit (x) изменяет длину переменной, он не может заменить оригинал в цикле.</p>
> for(i in 1:ncol(USDATAq)) {
+ USDATAq[,i]<-hpfilter(USDATAq[,i])
+ }
Ошибка в NextMethod (.Generic): количество заменяемых элементов не кратно длине замены
Итак, мне пришлось добавить неподобающий код вhpfilter, чтобы «объединить» результат с исходным (с помощью NA), а затем вернуть переменную.Это слияние сопоставляет 2 переменные по дате (следовательно, по длине), заполняя NA результатом.Затем этот результат может заменить оригинал в цикле.В заключение мне пришлось изменить hpfilter на:
hpfilter <- function(x,lambda=2){
y<-na.omit(x)
eye <- diag(length(y))
coredata(y) <- solve(eye + lambda * crossprod(diff(eye, lag=1, d=2)), coredata(y))
xy<-merge(x,y)
return(xy[,2])
}
и затем использовать цикл выше, чтобы в итоге получить безошибочные результаты.Мои знания о R настолько просты, что, вероятно, есть более простые способы сделать это.Но, по крайней мере, я могу продолжить сейчас.Спасибо всем за указание в правильном направлении.Я все еще приветствую дальнейшие исправления в моем коде выше.