R Shiny:如何使用 shinydashboard 库在闪亮的应用程序中显示数据框

R Shiny: how to display dataframe in shiny app using shinydashboard library

我正在构建一个闪亮的应用程序,它从用户那里获取输入值并动态显示数据框。当我不使用 shinydashboard 库时,我能够成功显示数据框。但是我无法使用 ui.R 中的 dataTableOutput 和 server.R

中的 renderDataTable 显示数据框

我也尝试显示 mtcars 数据框,它不是反应性数据框,但也没有显示。

这是我的 server.R 文件中的内容:

  values<- reactiveValues() 
  values$df<- data.frame()

  observeEvent(input$click_counter, {
    name<- input$name
    gender<- input$gender
    college<- input$college
    team<- input$team
    score<- as.numeric(input$score)
    rank<- 0

    new_row<- data.frame(rank,name,college,gender,team,score)

    values$df<- rbind(values$df, new_row)
    values$df<- values$df[order(values$df$score,decreasing=TRUE),]
    values$df$rank<- 1:nrow(values$df)

  })

  output$nText2<- renderDataTable({
    datatable(values$df)
  }, options = list(orderClasses = TRUE,lengthMenu = c(5, 10, 30), pageLength = 5))

这就是我在 ui.R 文件中的内容:

tabItem(tabName = "signup",
        fluidRow(
        box(textInput("name",  "이름"),
        selectInput("college", "대학",
                    choices = list("간호대학", "경영대학",
                                   "공과대학", "농업생명과학대학",
                                   "미술대학", "법과대학",
                                   "사범대학", "사회과학대학",
                                   "수의과대학", "생활과학대학",
                                   "약학대학", "음악대학",
                                   "인문대학", "의과대학",
                                   "자연과학대학", "기타"),
                    selected = 1),
        selectInput("team", "교내 소속축구팀",
                    choices = list("싸커21", "아르마다",
                                   "에코플러스", "아크로",
                                   "P.O.S", "공대",
                                   "자연대", "관악사",
                                   "농대축구부 휘모리", "지오싸카스",
                                   "새츠", "샥스",
                                   "FC SEES", "Cells United",
                                   "프리템포", "남풍",
                                   "없음")),
        textInput("score", "점수"),
        actionButton("click_counter","Submit")),
        box(DT::dataTableOutput("nText2"))
)

我稍微修改了你的代码,它运行良好:

1. 您忘记在代码中使用 id="gender"

创建小部件

2. reactiveValues(df=NULL)

3. 数据表输出代码:

output$nText<- renderDataTable({ datatable(values$df, options = list(orderClasses = TRUE,lengthMenu = c(5, 10, 30), pageLength = 5))})

完整的应用程序代码如下:

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


ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(disable = TRUE),
  dashboardBody(
    tabItem(tabName = "signup",
            fluidRow(
              box(textInput("name",  "이름"),
                  textInput("gender",  "이름"),
                  selectInput("college", "대학",
                              choices = list("간호대학", "경영대학",
                                             "공과대학", "농업생명과학대학",
                                             "미술대학", "법과대학",
                                             "사범대학", "사회과학대학",
                                             "수의과대학", "생활과학대학",
                                             "약학대학", "음악대학",
                                             "인문대학", "의과대학",
                                             "자연과학대학", "기타"),
                              selected = 1),
                  selectInput("team", "교내 소속축구팀",
                              choices = list("싸커21", "아르마다",
                                             "에코플러스", "아크로",
                                             "P.O.S", "공대",
                                             "자연대", "관악사",
                                             "농대축구부 휘모리", "지오싸카스",
                                             "새츠", "샥스",
                                             "FC SEES", "Cells United",
                                             "프리템포", "남풍",
                                             "없음")),
                  textInput("score", "점수"),
                  actionButton("click_counter","Submit")),
              box(DT::dataTableOutput("nText"))
            )
  )))

server <- shinyServer(function(input, output, session) {

  values<- reactiveValues(df = NULL) 
  #values$df<- data.frame()

  observeEvent(input$click_counter, {
    name<- input$name
    gender<- input$gender
    college<- input$college
    team<- input$team
    score<- as.numeric(input$score)
    rank<- 0

    new_row<- data.frame(rank,name,college,gender,team,score)

    values$df<- rbind(values$df, new_row)
    values$df<- values$df[order(values$df$score,decreasing=TRUE),]
    #print(values$df)
    values$df$rank<- 1:nrow(values$df) 
  })

  output$nText<- renderDataTable({
    datatable(values$df, options = list(orderClasses = TRUE,lengthMenu = c(5, 10, 30), pageLength = 5))})
})

shinyApp(ui = ui, server = server)