2016-05-22 4 views
1

Ich versuche zu verwenden, um eine Funktion auf alle Symbole anwenden, die ich in einer Liste habe. Die Symbole sind Aktienkursdaten der Form:Verwenden von Lapply mit einer Liste von Aktien Symbolen

Date Open High Low Close 

ich in der Lage gewesen, es zu tun mit diesem Format:

require(TTR) 
require(quantmod) 

symbols <- c("XLF", "XLK", "XLU") 

StartDate = '2015-01-01' 
Stocks = lapply(symbols, function(sym, column) { 
    SMA(na.omit(getSymbols(sym, from=StartDate, auto.assign=FALSE))[,4],20) 
}) 

aber ich kann nicht trainieren, wie einfach lapply verwenden, um eine Funktion anzuwenden zu einer Liste von Symbolen, für die ich bereits Daten habe. Ich möchte nicht die Daten mit getSymbols herunterladen, ich möchte meine eigenen Daten für die gleichen Symbole verwenden.

Im folgenden Beispiel lade ich es nur herunter, um ein reproduzierbares Beispiel zu erstellen, aber in Wirklichkeit habe ich die Daten für die Symbole als XTS-Objekte gespeichert.

Ich kann nicht verstehen, warum dies nicht funktionieren wird, oder wie es zu dem ersten Beispiel unterscheidet:

require(TTR) 
require(quantmod) 

symbols <- c("XLF", "XLK", "XLU") 
getSymbols(symbols, src='yahoo', from = '2015-01-01') 

SMA_Symbols <- lapply(symbols, function(sym, column) { 
SMA(sym[,4],20) 
}) 

ich den Fehler:

Error in sym[, 4] : incorrect number of dimensions Called from: inherits(x, "xts")

Antwort

1

Der Grund Ihren zweiter Ansatz ist funktioniert nicht, dass getSymbol lädt die Daten für das Symbol in der globalen Umgebung und Symbole sind immer noch ein Vektor von Zeichentyp. So ist die sym nur ein Zeichen enthält nicht wirklich Daten.

Mit der Funktion get können Sie auf die Daten zugreifen, die mit dem Namen des entsprechenden Symbols verknüpft sind. Etwas wie das:

require(TTR) 
require(quantmod) 

symbols <- c("XLF", "XLK", "XLU") 
getSymbols(symbols, src='yahoo', from = '2015-01-01') 

SMA_Symbols <- lapply(symbols, function(sym, column) { 
    SMA(na.omit(get(sym))[,4],20) 
}) 

head(SMA_Symbols[[1]][-(1:19)]) 
       SMA 
2015-01-30 23.7580 
2015-02-02 23.6905 
2015-02-03 23.6685 
2015-02-04 23.6620 
2015-02-05 23.6550 
2015-02-06 23.6395 
+0

Danke @Psidom, für den richtigen Code und die detaillierte Antwort. Das macht vollkommen Sinn. Sehr geschätzt. – trentcroad

Verwandte Themen