2017-09-08 6 views
0

Ich arbeite mit einem Datenrahmen (stock), der eine Datumsspalte (erste Spalte) enthält. Ich möchte es nach dem Datum unterteilen.Subset in Shiny am Index (Datum)

stock_date <- reactive(which(stock()[, 1] == input$date[1]) - 1) 
stock_sub <- reactive(stock()[-(1:stock_date(), ]) 

input$date[1] das Datum Beginn ist von dateRangeInput, ist die erste Zeile der Index dieses Datum zu suchen. Die zweite Zeile besteht darin, den Datenrahmen entsprechend dem von uns erhaltenen Index zu unterteilen.

Während der Fehler habe ich ist

Argument der Länge 0

Ich habe versucht, match statt which zu verwenden, aber erhielt den gleichen Fehlercode.

Jeder kann helfen? Danke vielmals!

Eingang ist wie folgt:

textInput("ticker", "Stock ticker:") 
dateRangeInput("date", "Date Range:") 

Lager ab:

stock2 <- 
    reactive(
     getSymbols(
     toupper(input$ticker), 
     from = input$date[1] - 300, 
     to = input$date[2], 
     src = "google", 
     auto.assign = F 
    ) 
    ) 

    stock3 <- reactive(as.data.table(stock2())) 
    stock <- reactive(as.data.frame(stock3())) 

Und ich habe auch versucht, die in der Konsole nach einer es funktionierte perfekt:

jpm <- getSymbols(
      "JPM", 
      from = "2012-01-03", 
      src = "google", 
      auto.assign = F 
     ) 
jpm <- as.data.table(jpm) 
jpm <- as.data.frame(jpm) 
which(jpm[, 1] == "2012-01-03") 

gibt 1 zurück

+0

Können Sie diese Frage stellen [reproduzierbaren] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? Es ist ein bisschen schwierig, ohne genau zu wissen, wie 'input $ date' und' stock() 'aussehen. Vielleicht wäre es ein guter Anfang, dies zuerst in einem nicht glänzenden (nicht reaktiven) Modus zu testen. Meine Vermutung ist jedoch, dass es keine Übereinstimmung gibt, also ist 'stock_date()' leer. – r2evans

+0

Vielen Dank. Bitte beachten Sie mein Update – Arthur

+0

Der komplette Code ist sehr lang und beinhaltet Plotten. Der Fehler tritt auf, wenn ich auf die Plot-Schaltfläche klicke. Aber ich bin mir sicher, dass mit der Handlung und anderen Architekturen nichts falsch ist, weil ich ihre Funktion auf andere Weise getestet habe und es funktioniert gut – Arthur

Antwort

0

Wir sind sollte die subset Funktion innerhalb einer reactive Funktion setzen und den erforderlichen data.frame zurückgeben.

Beispiel:

stock.sub <- reactive({ 
    value <- subset(stock(), stock()[, 1] >= input$date[1]) 
    value 
    })