【问题标题】:How to create a reactive data frame and table from user input checkboxes in shiny如何从闪亮的用户输入复选框创建反应性数据框和表格
【发布时间】:2021-02-09 08:52:13
【问题描述】:

所以基本上我正在尝试开发一个用户界面,如果人们在复选框中患有疾病,则可以在其中选择是或否。然后它将对每种相应的疾病进行是/否的回答,并创建一个数据框,以便可以呈现日期表并且人们可以看到他们的反应。我一直在努力尝试将复选框中单击的内容放入一个数据框中,其中包含我在编码中创建另一个日期框架的疾病。我已经尝试了几件事,现在它一直说当我尝试从用户选择的数据框创建数据框时找不到对象“data1”、“吸烟”和“糖尿病”。看来我的 if/else 语句不起作用。下面是我的代码

library(shiny)
library(DT)

# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("IVD"),

    
    sidebarLayout(
        sidebarPanel(
            checkboxGroupInput("Diabete", "Diabetes:",
                              choices =  c("Yes" = "yes0",
                                 "No" = "no0")),
            checkboxGroupInput("Smoke", "Smoking:",
                               c("Yes" = "yes1",
                                 "No" = "no1"))),

        
        mainPanel(
            fluidRow(actionButton("button", "Click for Risk Prediction")),
            dataTableOutput("summary_table")
        )
    )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

 
observeEvent(input$button, { 
output$summary_table<-renderDataTable({
    a<- eventReactive(input$Diabete, {   
        if (input$Diabete == "yes0") {
            a=1
        } else {
            a=0
        }})
    b<- eventReactive(input$Smoke, {   
        if (input$Diabete == "yes1") {
            b=1
        } else {
            b=0
        }})
    ivd<-c('Diabetes','Smoking')
    #data<- c(11,10,sugar,8,7,6,5,4,3,2,1)
    values <- reactiveValues()
    values$ivd <- data.frame()
    eventReactive(input$Diabete, {
        diabetes <- a
        smoking <- b
        
        da <- data.frame(diabetes, smoking)
        
        data1 <- rbind(values$ivd, da)
    })
    ivd_data<-data.frame(ivd,data1,stringsAsFactors=FALSE )
    print(ivd_data)   
})
})
}

# Run the application 
shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r dataframe checkbox shiny reactive


    【解决方案1】:

    试试这个

    # Define UI for application that draws a histogram
    ui <- fluidPage(
      
      # Application title
      titlePanel("IVD"),
      
      
      sidebarLayout(
        sidebarPanel(
          checkboxGroupInput("Diabete", "Diabetes:",
                             choices =  c("Yes" = "yes0",
                                          "No" = "no0")),
          checkboxGroupInput("Smoke", "Smoking:",
                             c("Yes" = "yes1",
                               "No" = "no1"))),
        
        mainPanel(
          fluidRow(actionButton("button", "Click for Risk Prediction")),
          DTOutput("summary_table")
        )
      )
    )
    
    # Define server logic required to draw a histogram
    server <- function(input, output) {
      
      
      observeEvent(input$button, { 
        
        a<- eventReactive(input$Diabete, {   
          a = ifelse(input$Diabete == "yes0",1,0) 
          })
        
        b<- eventReactive(input$Smoke, {   
          b = ifelse(input$Smoke == "yes1",1,0) 
          })
        
        ivd<- data.frame(a='Diabetes',b='Smoking')
        
        data1 <- reactive({
          data <- rbind(ivd,data.frame(a=a(),b=b()))
        })
        
        output$summary_table <- renderDT(data1())
        
      })
    }
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 非常感谢@YBS!是的,这行得通!第二个问题,我看到 ifelse 语句设置了两个选项“1”和“0”。如果您有两个以上的选择,您将如何设置它?如“1”、“2”、“4”、“5”。
    • 有很多方法可以做到这一点。最简单的方法是执行您在 OP 中的操作,即 if(){...} else if (){...} else if (){...} 等等。如果您可以管理,嵌套ifelse 可以相当容易地完成。也可以试试case_when(),arraysqldf
    猜你喜欢
    • 2015-06-13
    • 2022-01-12
    • 1970-01-01
    • 2019-10-20
    • 2018-02-04
    • 1970-01-01
    • 2016-04-04
    • 2017-11-24
    • 2017-12-19
    相关资源
    最近更新 更多