r - 如果闪亮中的 else 语句无法正常工作
问题描述
下面是我一直在编写的脚本。您会注意到反应性语句 ,table_data()
是进行繁重工作的地方。运行应用程序时,您会看到所有三个过滤器都是空的。它们应该是空的,但呈现的表应该生成一个表,该表表示最终else if
语句中的过滤输出:
res <- df %>% group_by(level1) %>% summarise(total=sum(sales))
,所以当应用程序加载时,你应该看到的第一件事是:
但它不会产生这种情况。它产生一个空表。我很难理解我做错了什么。这是脚本:
level1 <- c('1','1','1','1','1','1','2','2','2','2','2','2','3','3','3','3','3','3')
level2 <- c('1A','1A','1B','1B','1C','1C','2A','2A','2B','2B','2C','2C','3A','3A','3B','3B','3C','3C')
level3 <- c('Jones','Smith','Johnson','James','Evans','Long','Roth','Goldberg','Ramos','Winston','Levin','Jackson','Fishman','Drake','Quinn','Lackey','Scott','McGuire')
sales <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)
df <- cbind(level1,level2,level3,sales) %>% as.data.frame() %>% mutate(level1 = as.character(level1), level2 = as.character(level2), level3 = as.character(level3), sales = as.integer(sales))
ui <- fluidPage(
fluidRow(
column(8,
width = 10, offset = 1,
tags$h3("Select Area"),
panel(
selectInput('lev1', label = 'Level 1', c(unique(sort(df$level1))), multiple = TRUE),
uiOutput("level2"),
uiOutput("level3")
),
DT::dataTableOutput(outputId = "test")
)
)
)
server <- function(input, output, session) {
output$level2 <- renderUI({
selectizeInput("lev2", "Level 2", multiple = TRUE, c(unique(sort(df$level2[df$level1 ==input$lev1]))))
})
output$level3 <- renderUI({
selectizeInput("lev3", "Level 3", multiple = TRUE, c(unique(sort(df$level3[df$level2 ==input$lev2]))))
})
table_data <- reactive({
if(!is.null(input$lev1) & is.null(input$lev2) & is.null(input$lev3)) #When lev1 is not null, but the other two are
res <- df %>% filter(level1 %in% input$lev1) %>% group_by(level1,level2) %>% summarise(total=sum(sales))
else
if(is.null(input$lev1) | !is.null(input$lev1) & !is.null(input$lev2) & is.null(input$lev3)) #When lev2 is not null, lev3 is null, and lev1 can be either/or
res <- df %>% filter(level2 %in% input$lev2) %>% group_by(level2,level3) %>% summarise(total=sum(sales))
else
if(is.null(input$lev1) | !is.null(input$lev1) & is.null(input$lev2) | !is.null(input$lev2) & !is.null(input$lev3)) #When lev3 is not null, lev1 can be either/or, and lev2 can be either/or
res <- df %>% filter(level3 %in% input$lev3) %>% group_by(level1,level2,level3) %>% summarise(total=sum(sales))
else
if(is.null(input$lev1) & is.null(input$lev2) & is.null(input$lev3)) #When lev1 is null, lev2 is null, and lev3 is null (THIS ONE IS NOT WORKING CORRECTLY)
res <- df %>% group_by(level1) %>% summarise(total=sum(sales))
})
output$test <- DT::renderDataTable({
table_data()
})
}
shinyApp(ui,server)
解决方案
推荐阅读
- r - 为什么我的 geom_bar 上的条不使用 reorder() 命令重新排序?
- amazon-web-services - AWS 按用户管理 ec2 入站/出站规则
- php - 删除 JQuery 库后 JQuery 仍然存在
- react-native - React Native 风格中不同的 package.json 依赖项
- r - R 错误:“匹配”需要矢量参数 - 以 S4 对象(光栅)作为参数和运算符 %in% 的包函数
- testing - 使用 TeamCity 服务消息查找测试是否失败并显示在构建日志上
- ios - 在闭包中隐式使用“self”;使用“自我”。在 Swift 中明确捕获语义
- python - vs代码中的热键在python交互式窗口和活动编辑器之间切换?
- node.js - 无法授权对 Azure 表服务的查询
- c# - 将 Dapper 查询反序列化为模型