r - R闪亮链接checkboxGroupInputs
问题描述
大家好,
我需要你的帮助:我有一个名为 data_test 的数据框,你可以用这些行重现它:
PC<-c('001','002','003','004','005','006','007','008','009','010')
A<-c('2','2','1','1','2','0','2','0','1','0')
B<-c('0','2','0','0','1','0','0','0','1','0')
C<-c('1','0','0','0','2','2','0','0','0','1')
D<-c('1','0','1','1','0','2','1','1','2','2')
E<-c('0','0','0','2','2','0','0','0','0','2')
F<-c('0','1','1','1','0','0','2','0','0','0')
data_test <- data.frame(PC, A, B, C, D, E, F)
我有三个名为“variable1”、“variable2”和“variable3”的 chekboxGroupInputs。这些 chekboxGroupInputs 中的每一个都有以下选择:“是”=“1”,“否”=“2”,“也许”=“0”。当我在第一个 chekboxGroupInput 中选中“否”选项时,出现次数显示为“4”:ok,如果我在第二个 chekboxGroupInput 中选中“也许”选项,出现次数为“2”:ok。但是,如果我取消选中“可能”框,则出现次数为“0”,而不是像以前那样返回“4”。当我检查时一切正常,但如果我取消选中,出现次数会下降到“0”,我不明白为什么。由于我的数据框中有几十个变量,我将拥有与变量一样多的 chekboxGroupInputs,所以如果您知道更好的方法来做到这一点,请告诉我。非常感谢您的帮助。这是我的程序的可重现示例:
library(dplyr)
library(shiny)
ui <- fluidPage(
fluidRow(
column(3,
checkboxGroupInput("variable1", "Occurences of column A :",
c("Yes (1)" = "1",
"No (2)" = "2",
"Perhaps (0)" = "0")),
checkboxGroupInput("variable2", "Occurences of column B :",
c("Yes (1)" = "1",
"No (2)" = "2",
"Perhaps (0)" = "0")),
checkboxGroupInput("variable3", "Occurences of column C :",
c("Yes (1)" = "1",
"No (2)" = "2",
"Perhaps (0)" = "0"))),
column(3,
tableOutput("data")),
column(3,
textOutput("result"))
)
)
server <- function(input, output, session) {
result <- 0
observe({input$variable1
output$result <- renderText({
df1 <- filter(data_test, A %in% input$variable1)
assign("df1", df1, envir = .GlobalEnv)
result <- paste("Number of occurences = ", NROW(df1))
})
})
observe({input$variable2
if (is.null(input$variable2)){
result <- paste("Number of occurences = ", NROW(df1))}
else {
output$result <- renderText({
df2 <- filter(df1, B %in% input$variable2)
assign("df2", df2, envir = .GlobalEnv)
result <- paste("Number of occurences = ", NROW(df2))
})
}
})
observe({input$variable3
if (is.null(input$variable3)){
result <- paste("Number of occurences = ", NROW(df2)) }
else {
output$result <- renderText({
df3 <- filter(df2, C %in% input$variable3)
assign("df3", df3, envir = .GlobalEnv)
result <- paste("Number of occurences = ", NROW(df3))
})
}
})
output$data <- renderTable({data_test})
}
shinyApp(ui, server)
解决方案
我创建了一个在下面工作的示例。我做df
了一个reactive
(这意味着它应该用 调用df()
),并将所有过滤器放在一起。这is.null(input$variable1)
是必要的,因为(我假设)如果没有选择任何内容,您需要所有行。
library(dplyr)
library(shiny)
PC<-c('001','002','003','004','005','006','007','008','009','010')
A<-c('2','2','1','1','2','0','2','0','1','0')
B<-c('0','2','0','0','1','0','0','0','1','0')
C<-c('1','0','0','0','2','2','0','0','0','1')
D<-c('1','0','1','1','0','2','1','1','2','2')
E<-c('0','0','0','2','2','0','0','0','0','2')
F<-c('0','1','1','1','0','0','2','0','0','0')
data_test <- data.frame(PC, A, B, C, D, E, F)
ui <- fluidPage(
fluidRow(
column(3,
checkboxGroupInput("variable1", "Occurences of column A :",
c("Yes (1)" = "1",
"No (2)" = "2",
"Perhaps (0)" = "0")),
checkboxGroupInput("variable2", "Occurences of column B :",
c("Yes (1)" = "1",
"No (2)" = "2",
"Perhaps (0)" = "0")),
checkboxGroupInput("variable3", "Occurences of column C :",
c("Yes (1)" = "1",
"No (2)" = "2",
"Perhaps (0)" = "0"))),
column(3,
tableOutput("data")),
column(3,
textOutput("result"))
)
)
server <- function(input, output, session) {
result <- 0
df1 <- reactive({
filter(data_test,
(is.null(input$variable1) | A %in% input$variable1),
(is.null(input$variable2) | B %in% input$variable2),
(is.null(input$variable3) | C %in% input$variable3))
})
output$result <- renderText(paste("Number of occurences = ", nrow(df1())))
output$data <- renderTable({df1()})
}
shinyApp(ui, server)
推荐阅读
- ansible - 如何使用 ansible 推送带有 SSH 密钥身份验证的剧本
- javascript - 如果是reactjs中的问号
- php - JS 文件夹未在 Wordpress 中读取
- c# - 如何在 C# 中将两个进程的生命周期联系在一起?
- ruby-on-rails - 如何搜索与 searchkick(弹性搜索)的关联以及聚合
- flutter - 您好,在登录期间尝试发布 http 请求。如何访问包含字符串值的映射中的值
- python - 接受来自印度的烧瓶中的国际条纹付款
- angular - TypeError:data.slice 不是 Angular 的函数
- android-studio - Kotlin - 我收到错误,因为 id 为空。如何解决?
- flutter - Progect 显示错误,无法选择模拟器