【发布时间】:2017-11-25 00:51:11
【问题描述】:
使用 Shiny,我试图根据用户输入过滤数据框,然后显示过滤后的数据框。我正在努力寻找一种策略,使我能够在适用时不过滤数据框并显示未过滤的数据框。我搜索了 Stack Overflow 寻求帮助,发现了这个类似的问题 R - Shiny Filter for 'All' values。我尝试实施 Kristoffer Winther Balling 推荐的解决方案,但没有成功。当我选择“未选择”选项时,会显示一个空表而不是未过滤的表。
library(shiny)
library(tidyverse)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
radioButtons(inputId = "cut", label = "Select Cut",
choiceNames = c(levels(as.factor(diamonds$cut)), "None Selected"),
choiceValues = c(levels(as.factor(diamonds$cut)), NA))
),
mainPanel(tableOutput("diamonds_filtered"))
)
)
server <- function(input, output) {
output$diamonds_filtered <- renderTable({
diamonds_filtered <- diamonds
if (!is.na(input$cut)) {
diamonds_filtered <- filter(diamonds_filtered, cut == input$cut)
}
head(diamonds_filtered)
})
}
shinyApp(ui, server)
过滤不等于 NA 的用户输入按预期工作。 Proper filtering
然而,当输入为“未选择”且值为 NA 时,未显示未过滤的数据框。 improper filtering
非常感谢任何关于我可能做错的建议。
【问题讨论】:
-
改用
if (input$cut!="") {... -
@HubertL 非常感谢您的建议!一旦我将“None Selected”选项的值修改为 =“”并按照您的建议更改了我的
if语句,我得到了所需的输出。谢谢!!我已根据您的建议回答了以下问题。 -
如果你保留 NA,它应该也可以工作