Я новичок в Shiny и закончил учебник по Shiny здесь: http://shiny.rstudio.com/tutorial/ < / а>
В уроке 6 учебное пособие показывает нам, как создать приложение, в котором вы вводите символ акции и диапазон дат, чтобы увидеть его график на главной панели.
Я пытаюсь пойти немного дальше, изменив приложение на то, которое принимает 2 символа акций и рисует их на одном графике, сравнивая их во времени (перекрываясь на одном графике).
Я изменил server.R, чтобы он был:
library(quantmod)
shinyServer(function(input, output) {
dataInput <- reactive({
getSymbols(c(input$symb1, input$symb2), src = "yahoo",
from = input$dates[1],
to = input$dates[2],
auto.assign = TRUE)
})
output$plot <- renderPlot({
chartSeries(dataInput(), theme = chartTheme("white"),
type = "line", log.scale = input$log, TA = NULL)
})
})
и мой uiR должен быть:
library(shiny)
shinyUI(fluidPage(
titlePanel("StockComp"),
sidebarLayout(
sidebarPanel(
helpText("Select two stocks and a time frame to compare.
Information will be collected from yahoo finance."),
textInput("symb1", "1st Stock Symbol", "GOOG"),
textInput("symb2", "2nd Stock Symbol", "AAPL"),
dateRangeInput("dates",
"Date range",
start = "2012-01-01",
end = as.character(Sys.Date())),
actionButton("get", "Compare Stocks"),
br(),
br(),
checkboxInput("log", "Plot y axis on log scale",
value = FALSE)
),
mainPanel(plotOutput("plot"))
)
))
Я получаю:
Ошибка в try.xts (x, error = "chartSeries требуется объект xtsible"): chartSeries требуется объект xtsible
Я попытался преобразовать dataInput в XTS, но XTS и реактивный, похоже, вызывают у меня много проблем с моим ограниченным пониманием того, что происходит.
getSymbols()
- это просто оболочка, которая напрямую не возвращает объект, поэтому, когда вы пытаетесь назначить егоdataInput
, нет конкретной вещи для назначения. Вместо этого он создает отдельные фреймы данных с именами вызываемых символов в глобальной среде. - person ulfelder   schedule 27.07.2015getSymbols()
является объект xts. Добавление еще одного тикера для отображения того же графика - нетривиальная задача. Должно быть возможно достичь этого, определив временной ряд одного тикера как индикатор другого, в частности, используяnewTA()
с опциейon=1
, но это несколько сложно. - person RHertel   schedule 27.07.2015