2017-08-29 2 views
2

I rollapply auf zwei Säulen in einem DatenrahmenR: rollapply auf zwei Variablen

library(xts) 
library("dLagM") 

data(warming) 
fdlm1 <- function(){ 
model.ardl = ardlDlm(x = warming$NoMotorVehicles, y = warming$Warming, p = 1 , q = 1 , show.summary = FALSE) 

fc <- ardlDlmForecast(model = model.ardl , x = tail(x,1) , h =1)$forecasts 
fc 
return(fc)} 

dcalc1 <- rollapply(warming,18,fdlm1) 

jedoch zu tun versuchen, ist eine Fehlermeldung erhalten:

Error in FUN(data[posns], ...) : unused argument (data[posns]) 

Danke für jede Hilfe in dem Hinweis auf, was Ich mache falsch.

Antwort

3

Standardmäßig ruft rollapply die Funktion für jede Spalte der Daten einzeln auf. Sie müssen by.column = FALSE festlegen, wenn die Funktion Zugriff auf mehr als eine Spalte haben soll.

dcalc1 <- rollapply(warming, 18, fdlm1, by.column = FALSE) 

Dieses einfache Beispiel funktioniert:

data(sample_matrix) 
x <- as.xts(sample_matrix) 
r <- rollapply(x, 40, function(d) coef(lm(Close ~ Open, data=d)), by.column=FALSE) 

Wenn Sie immer noch Probleme haben, dann würde ich zwei Fragen spreche ich mit Ihrer Funktion sehen:

  1. Sie sollten Objekte übergeben zu Ihrer Funktion über Argumente anstelle von basierend auf Scoping, um sie zu finden, und
  2. x in tail(x, 1) ist nicht im Funktionsumfang definiert ... daher ist es schwer zu sagen, wo R einen Wert für x findet.
+0

Danke. Ich tat das, aber ich bekomme immer noch den Fehler: –

+1

Dann ist das Problem wahrscheinlich mit Ihrer Funktion, weil ein einfaches Beispiel funktioniert: 'data (sample_matrix); x <- as.xts (Beispielmatrix); rollapply (x, 40, Funktion (d) coef (lm (Schließen ~ Öffnen, Daten = d)), by.column = FALSE) '. Sie sollten Objekte wirklich über Argumente an Ihre Funktion übergeben, statt sich auf das Scoping zu verlassen, um sie zu finden. Und 'x' in' tail (x, 1) 'ist im Funktionsumfang nicht definiert ... daher ist es schwer zu sagen, wo R einen Wert für' x' findet. –

+0

Danke für Ihre Erklärung. –

Verwandte Themen