如何在 for 循环中启动闪亮的仪表板

问题描述 投票:0回答:1

我尝试在 for 循环内的闪亮仪表板中启动数据框。 我的目的是在每次迭代中更新数据框中的值,并在闪亮的仪表板中显示它。 由于某种原因,闪亮的仪表板根本没有启动。 尽管如果我选择

shinyApp(ui, server)
行并按 Enter,仪表板会正确启动。 仪表板未在循环内启动的原因可能是什么?非常感谢!

library(shiny)
library(shinydashboard)
library(DT)

# my dataframe:
letter <- c("a","b")
number <- c(1,2)
df <- data.frame(letter, number)

# sidebar
sidebar <- dashboardSidebar()

# body
body <- dashboardBody(
  fluidRow(
    box(width = 6, 
        DT::dataTableOutput("mytable")
    )
  )
)

# ui
ui <- dashboardPage(dashboardHeader(title = "hello world"),
                    sidebar,
                    body
)

# server logic
server <- function(input, output) {
  output$mytable = DT::renderDataTable({
    df
  })
}

#launch shiny app:
for (t in 1:3) {

  df[1,2] <- t
  shinyApp(ui, server)

}

编辑1

我已经尝试用下面的代码替换服务器代码,尽管这不会在 Shiny 中提供数据框:

# server logic
server <- function(input, output) {
  # my dataframe:
  
  df <- reactive(
    for (t in 1:300) {
    data.frame(
      letter=c("a","b"),
      number=c(1,t)
    )}
    )
  
  output$mytable <- DT::renderDataTable({
    df()
  })
}
r shiny shinydashboard
1个回答
0
投票

按照您在示例中描述的方式使用 for 循环是行不通的,因为 for 循环会产生多个闪亮的应用程序,但我假设您想要的只是简单地更新您的闪亮应用程序。在这种特定情况下,数据框的值位于 [1,2] 处。使用简单的计数器比使用循环更容易实现。

# sidebar
sidebar <- dashboardSidebar()

# body
body <- dashboardBody(
  fluidRow(
    box(width = 6, 
        inputPanel(numericInput("NUM","iteration",value=1)),
        DT::dataTableOutput("mytable")
    )
  )
)

# ui
ui <- dashboardPage(dashboardHeader(title = "hello world"),
                    sidebar,
                    body
)

# server logic
server <- function(input, output) {
  # my dataframe:
  df <- reactive(
    data.frame(
      letter=c("a","b"),
      number=c(1,input$NUM)
      ))

  output$mytable <- DT::renderDataTable({
    df()
  })
}

shinyApp(ui, server)

查看 df 是如何创建为反应对象的,因此您可以像调用函数一样调用它:

df()
而不是渲染函数中的
df

df[1,2] 被简单地分配给

input$NUM
,即在 UI 中设置的计数器。

我希望这有助于并回答您的问题,如果没有,请随时更新您的问题或发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.