从闪亮的列表中绘制 dygraph

plot dygraph from a list in shiny

我希望通过选择每个列表的名称来绘制 xts 系列列表中的 xts。 我不明白反应性和列表选择是如何工作的

library(zoo)
library(dygraphs)
library(xts)

d <- seq(as.Date("2020/01/01"), as.Date("2020/05/01"), "months")
xts1 <- xts(rnorm(5),order.by = d)
xts2 <- xts(rnorm(5),order.by = d)
xts3 <- xts(rnorm(5),order.by = d)
l <- list(xts1,xts2,xts3)
names(l) <- c("uno","dos","tres")

创建 xts 对象列表


library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Old Faithful Geyser Data"),

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
        sidebarPanel(
            selectInput(names,names,names(l))
        ),

        # Show a plot of the generated distribution
        mainPanel(
            dygraphOutput("plot")
        )
    )
)

# Define server logic required to draw a histogram
server <- function(input, output) {
      
    #option 1 
        p <- reactive({
        input$names
    })
   output$plot <- renderDygraph({
        l[[p]]
})

# option 2

    output$plot <- renderDygraph({
        l[[input$names]]
    })
}

# Run the application 
shinyApp(ui = ui, server = server)

这两种方式都行不通。 欣赏:)

您的代码中有四处错误:

  • selectInput()中,您必须为前两个参数使用引号,对应于inputIdname

  • 您不能在 server 中使用 output$plot 两次。 plot 必须是唯一的 ID,因此您可以使用 output$plot1output$plot2 等。这意味着您还需要在 ui 部分中有两个 dygraphOutput(或 plotOutput,或...)。

  • 当你定义一个reactive()时,你必须在之后调用它时使用括号,例如p()而不是p

  • renderDygraph(或renderPlot,或...)中,您仍然需要放置代码来创建绘图,就像在常规 R 中一样不是 R 闪亮。

因此,您更正后的代码是:

library(zoo)
library(dygraphs)
library(xts)
library(shiny)

d <- seq(as.Date("2020/01/01"), as.Date("2020/05/01"), "months")
xts1 <- xts(rnorm(5),order.by = d)
xts2 <- xts(rnorm(5),order.by = d)
xts3 <- xts(rnorm(5),order.by = d)
l <- list(xts1,xts2,xts3)
names(l) <- c("uno","dos","tres")


# Define UI for application that draws a histogram
ui <- fluidPage(
  
  # Application title
  titlePanel("Old Faithful Geyser Data"),
  
  # Sidebar with a slider input for number of bins 
  sidebarLayout(
    sidebarPanel(
      selectInput("names", "names", names(l))
    ),
    
    # Show a plot of the generated distribution
    mainPanel(
      dygraphOutput("plot1"),
      dygraphOutput("plot2")
    )
  )
)

# Define server logic required to draw a histogram
server <- function(input, output) {
  
  p <- reactive({
    input$names
  })
  output$plot1 <- renderDygraph({
    dygraph(l[[p()]])
  })

  output$plot2 <- renderDygraph({
    dygraph(l[[input$names]])
  })
}

# Run the application 
shinyApp(ui = ui, server = server)