我正在尝试使用checkboxGroupInput
来选择要显示的寄存器。但是,当通过多个条件过滤数据时,它不起作用。这是我正在使用的代码(使用的数据可以下载here):
库(有光泽)
ui <- fluidPage(
titlePanel("Shiny Pokédex"),
sidebarLayout(
sidebarPanel(
checkboxGroupInput("Generation", "Select Generation:",
c("First" = 1,
"Second" = 2,
"Third" = 3,
"Forth" = 4,
"Fifth" = 5,
"Sixth" = 6),
inline = T)
),
mainPanel(
dataTableOutput("Generation")
)
)
)
server <- function(input, output) {
pokemon <- read.csv("pokemon.csv")
output$Generation <- renderDataTable({
pokemon[pokemon$Generation == input$Generation,-11]
})
}
shinyApp(ui = ui, server = server)
我的目标是能够同时过滤多代。当只使用一个条件时它可以工作,但是当点击多个选项时,输出不是预期的。
答案 0 :(得分:1)
您使用的是==
,用于特定的相等。那就是:
1 == 1
# [1] TRUE
1 == 2
# [1] FALSE
但是当你开始在一边或另一边做多次时:
1 == c(1,2)
# [1] TRUE FALSE
在这种情况下,它表示“1等于1,1比1不等于2”,这不是你想要的。
其中一个TRUE
在所有行上循环使用,返回所有内容。
让我们试试%in%
:
1 %in% 1
# [1] TRUE
1 %in% c(1,2)
# [1] TRUE
c(1,3,4) %in% c(1,2)
# [1] TRUE FALSE FALSE
这具有set-membership的所需属性,并返回与运算符左侧相同长度的logical
向量。
申请使用时,只需将一个无功组件更改为:
output$Generation <- renderDataTable({
pokemon[pokemon$Generation %in% input$Generation,-11]
})