【问题标题】:R Shiny: how to display dataframe in shiny app using shinydashboard libraryR Shiny:如何使用 shinydashboard 库在闪亮的应用程序中显示数据框
【发布时间】:2017-07-28 15:53:13
【问题描述】:

我正在构建一个闪亮的应用程序,它从用户那里获取输入值并动态显示数据框。当我不使用 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"))
)

【问题讨论】:

  • 尝试:output$nText2 &lt;- renderDataTable(values$df, options = list(orderClasses = TRUE,lengthMenu = c(5, 10, 30), pageLength = 5)) in server.R 和box(dataTableOutput("ntext2")) in ui.R
  • @ottlngr 这正是我最初所拥有的,但它也不起作用......

标签: r dataframe shiny shinydashboard


【解决方案1】:

我对你的代码做了一些改动,它运行良好:

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)

【讨论】:

  • 非常感谢您的帮助 :) 您能否解释一下 values 的作用?
  • 您必须使用已经存在的内容创建反应值。解决方案是在反应值中放置一个空数据框(在您的情况下称为df)。
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2020-07-31
  • 2014-04-11
  • 1970-01-01
相关资源
最近更新 更多