从闪亮的列表中绘制 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()
中,您必须为前两个参数使用引号,对应于inputId
和name
。
您不能在 server
中使用 output$plot
两次。 plot
必须是唯一的 ID,因此您可以使用 output$plot1
和 output$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)
我希望通过选择每个列表的名称来绘制 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()
中,您必须为前两个参数使用引号,对应于inputId
和name
。您不能在
server
中使用output$plot
两次。plot
必须是唯一的 ID,因此您可以使用output$plot1
和output$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)