2016-05-28 8 views
0

Ich bin auf einem Projekt in der Fernerkundung läuft auf R. Ich habe einen RasterBrick (x) mit dem Raster für alle Daten, die ich interessiert bin, eine Zeit Serie mit den Daten (so genannte Zeit in der Funktion) entsprechen, und eine Funktion, die funktioniert, wie ich es möchte, wenn sie manuell bearbeitet (z ist der Pixel ich will):Erstellen Sie eine Schleife für eine Liste von Liste von RasterBrick in R

function(x,z) 
{ 
d<-bfastts(as.vector(x[as.numeric(z)]),time,type="16-day") 
n<-bfast(d, h=0.15, season="harmonic", max.iter = 1) 
l[[z]]<-list(n$output[[1]]$Tt) 
} 

die bfastts Funktion dient zum erstellen ein ts-Objekt, das die Werte eines Pixels entlang der Zeitserie enthält, das bfast ist ein anderes, das einige Statistiken verarbeitet, von denen ich nur ein Ergebnis haben möchte (dies ist die dritte Zeile)? Keine dieser beiden Funktionen gehören mir, und sie sind stabil und können im R-Paket-Repository gefunden werden.

Also, ich möchte hinzufügen "eine andere Ebene" der Funktion (Sorry für mein Vokabular, die nicht sehr präzise sein kann), die diese Funktion automatisch ausführen lassen würde. Mein erwartetes Ergebnis wäre eine Liste des Ergebnisses der obigen Funktion, also eine Liste der Zeitreihen jedes Pixels.

Ich habe versucht, diese (x ist immer noch die RasterBrick):

function(x) 
{ 
    z<-nrow(x)*ncol(x) 
    j<-last(z[[1]]) 
    l<-vector('list',length = j) 
    index<-function(x) 
    { 
    d<-bfastts(as.vector(x[as.numeric(z)]),time,type="16-day") 
    n<-bfast(d, h=0.15, season="harmonic", max.iter = 1) 
    l[[z]]<-list(n$output[[1]]$Tt) # this is to add the newly created element to the list 
    } 
    lapply(x, FUN='index') 
} 

aber ich bin immer eine Antwort, dass es nicht möglich ist, ein S4-Objekt auf einen Vektor zu zwingen, ich denke, das Problem ist, in lapply wer mag nicht die RasterBrick-Klasse ... Darüber hinaus möchte ich eine Liste der Liste in der Ausgabe, und nicht eine Liste von RasterBrick (Ich glaube, ich verstehe lapply gibt eine Liste von Objekten mit der gleichen Klasse wie x).

Ich habe verschiedene Workarounds ausprobiert, keine erfolgreich, was nicht überraschend ist, mein niedriges Niveau in der Programmierung zu geben, und dieses scheint mir am nächsten zu dem was ich brauche. Ich glaube nicht, dass ich weder vollständig verstehe, wie es funktioniert, noch die Verwendung einer Funktion in einer Funktion.

Vielen Dank, wenn Sie mir helfen können. Beifall Guillaume

Antwort

0

im Falle So könnte es jemandem nützlich sein, hier ist, wie ich dieses Problem gelöst (es scheint eher sehr einfach endlich), die „Ziegel“ Objekt ist das RasterBrick:

pixelts<- as.list(as.data.frame(t(as.data.frame(brick)))) 
Verwandte Themen