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