2016-03-19 4 views
0

Ich habe eine Liste von mehreren tausend Stocksymbolen, um eine Funktion zu durchlaufen. Die Funktion akzeptiert jedoch nur 200 oder weniger Symbole gleichzeitig. Wie richte ich die Schleifen ein, um Blöcke von 200 Symbolen zu durchlaufen, bis die Liste abgeschlossen ist. Unten ist eine lose Struktur, ich denke, dass es so aussehen könnte. Die Funktion funktioniert, wenn ich das manuell gekürzte ShortSymb passiere, aber ich muss diesen Prozess automatisieren, damit er iterieren kann.Looping durch eine Liste in Chunks

library(quantmod) 
symbols<-read.csv("companylist.csv") 

for(i in 1:end){ 
    for(i in 1:200) 

     metrics <- getQuote(paste(symbols sep="", collapse=";"), what=what_metrics) 
}} 

shortsymb<-symbols[1:199,] 
+0

Hallo der Teilmenge, willkommen DAMIT. Bitte denken Sie daran, auf [fragen] nachzulesen und wie man ein [reproduzierbares Beispiel] erstellt (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Es erleichtert es anderen, Ihnen zu helfen. – Heroka

Antwort

0

Hier ist eine mögliche Lösung quick'n'dirty:

nSym <- nrow(symbols) 
chunkSize <- 200 
for(i in 1:ceiling(nSym/chunkSize)){ 
    shortsymb<-symbols[((i-1)*chunkSize+1):min(nSym,(i*chunkSize)),] } 
    # do what you need with shortsymb 
} 

Beschreibung des Codes:

  • die Anzahl der Stücke berechnen einfach durch Dividieren: nSym/chunkSize (wir nehmen die Decke da kann es einen Rest geben, wenn nSym ist kein Vielfaches von chunkSize)
  • für jeden Chunk (1,2,...,n) wir berechnen die entsprechenden Start- und Zielzeilenindizes, wie start = ((i-1)*chunkSize+1) und end = min(nSym,(i*chunkSize)) (min Funktion notwendig ist, weil letzte Brocken kleiner als chunkSize sein könnte)
  • wir die Indizes verwenden, um die ursprüngliche data.frame
+0

schnell und dreckig funktioniert für mich, clevere lösung, danke – Rob