我正在构建一个闪亮的仪表板,并从同一数据集中进行许多绘图。与其为每个选择的系列制作单独的服务器output $ name对象,不如让一个服务器对象带有一个变量,然后将一个变量传递给每个ui对象,以指示我要显示的系列。
ui <- dashboardPage(
fluidRow(
column(width = 6,
box(title = "Net Income", width=NULL,
dygraphOutput(outputId = "net_income", height = "300px"))
),
column(width = 6,
box(title = "Accounts Receivable", width=NULL,
dygraphOutput(outputId = "accounts", height = "300px"))
)
) # end ui
请注意我正在创建的多个服务器对象,这些对象从单个对象fcast_data中选择要显示的系列。我正在从该数据集中显示10个图表,因此必须产生10个单独的服务器渲染对象。我想创建一个带有变量“ series_name”的服务器对象,我可以从ui对象中传递该变量以指示要显示的系列。
server <- function(input, output) {
output$net_income <- renderDygraph({
dygraph(fcast_data %>% select(net_income), group = "my_dash")})
output$accounts_receivable <- renderDygraph({
dygraph(fcast_data %>% select(accounts_receivable), group = "my_dash")})
} # end server
有没有一种方法可以使一个服务器对象(renderDygraph)仅从ui对象(dygraphOutput)中获取参数来选择要显示的系列?我知道如何使用selectInputs来做到这一点,但无法弄清楚如何对ui对象中的变量进行硬编码以传递给服务器。
答案 0 :(得分:1)
出于完整性考虑:就像我在评论中提到的那样,可以在此处找到一个示例: https://shiny.rstudio.com/gallery/creating-a-ui-from-a-loop.html。
如果无法使用给定的代码对其进行测试,则可能与此类似:
types <- c("net_income", "accounts_receivable")
# server
lapply(1:2, function(nr) {
output[[paste0("dy_g", nr)]] <- renderDygraph({
dygraph(fcast_data %>% select(get(types[nr])), group = "my_dash")
})
}
# ui
lapply(1:2, function(nr) {
column(width = 6,
box(title = types[nr], width=NULL,
dygraphOutput(outputId = paste0("dy_g", nr), height = "300px"))
)
})