2017-02-14 8 views
0

Итак, я уверен, что неправильно сформулировал этот вопрос, но есть ли способ выполнить эквивалент ввода 1 в консоль в Shiny.Как ввести консольные эквивалентные команды в блестящие для интерактивных функций?

В принципе я хочу следующее работать в Shiny:

library(quantmod) 
library(fPortfolio) 


# Get data 

data1 <- getSymbols(c("VEU","SPY","VWO","AGG"), 
       from = "2016-01-01", 
       to = "2017-01-01") 
data2 <- do.call(merge, lapply(data1, function(x) Ad(get(x)))) 
data3 <- na.omit(ROC(data2,n = 1,"discrete")) 
colnames(data3) <- gsub(".Adjusted","",colnames(data3)) 
data4 <- as.timeSeries(data3) 

# fPortfolio options 

portfolioOptions<-portfolioFrontier(data4) 
plot(portfolioOptions) 

После этого мы получаем следующее в консоли:

Make a plot selection (or 0 to exit): 

1: Plot Efficient Frontier 
2: Add Minimum Risk Portfolio 
3: Add Tangency Portfolio 
4: Add Risk/Return of Single Assets 
5: Add Equal Weights Portfolio 
6: Add Two Asset Frontiers [LongOnly Only] 
7: Add Monte Carlo Portfolios 
8: Add Sharpe Ratio [Markowitz PF Only] 

Selection: 

Есть ли способ, чтобы ввести 1-8 в выборе на Блестящем и сделать сюжет соответственно?

+0

Серия флажков будет делать то, что вы хотите. –

ответ

0

Вы можете использовать which аргумент указать, какие участки для построения каждый раз:

library(shiny) 
shinyApp(ui=fluidPage(plotOutput("plot"), 
         textInput("num", "Enter choice", "1")), 
     server=function(input, output, session){ 
      plotlist <- reactiveValues() 
      observeEvent(input$num, { 
      if(!is.null(input$num)){ 
       if(input$num=="1") 
       plotlist$l <- 1 
       else 
       plotlist$l <- c(plotlist$l, as.numeric(input$num)) 
      }}) 
      output$plot <- renderPlot(plot(portfolioOptions, which=plotlist$l)) 
     }) 
+0

Спасибо! Прекрасно работает. –