我是R和Shiny的初学者,我有一点问题。
如果你能帮忙的话。
例如,我已将变量Group
添加到数据框" mtcars"以字符格式。现在我有3组汽车:1
,2
和3
,具体取决于" mpg"每辆车的水平。
我为ui编了代码:
library(shiny)
shinyUI(pageWithSidebar(
headerPanel("Example"),
sidebarPanel(checkboxGroupInput("dynamic", "Cars", label = "GROUPS",
choices = c("Group 1" = "1",
"Group 2" = "2",
"Group 3" = "3")
)),
对于服务器:
library(shiny)
shinyServer(function(input, output) {
output$textDisplay <- renderText({
a<-sum(mtcars$Group==input$dynamic)
a
})
})
当我只选中一个框时效果很好,但如果我检查多个框,则renderText仅显示我检查过的最后一组的车数。 那么,我怎样才能得到所有复选框的车数?
抱歉我的英文。
非常感谢。
答案 0 :(得分:1)
使用%in%
运算符:a<-sum(mtcars$Group ℅in℅ input$dynamic)
当您使用a == b
时,R会多次复制较短的对象以适应较长对象的长度:
a <- 1:6
b <- 1:2
a == b
#[1] TRUE TRUE FALSE FALSE FALSE FALSE
# a 1 2 3 4 5 6
# b 1 2 1 2 1 2
如果较长对象的长度不是较短对象的倍数,则会收到以下警告消息:
a <- c(1, 2, 2, 1, 3)
b <- 1:2
a == b
#[1] TRUE TRUE FALSE FALSE FALSE
# a 1 2 2 1 3
# b 1 2 1 2 1
Warning message:
In a == b : longer object length is not a multiple of shorter object length
(注意输出也不对)
如果第一个参数与第二个元素中的任何一个匹配,则%in%运算符返回TRUE
。
a <- c(1, 2, 2, 1, 3)
b <- 1:2
a %in% b
#[1] TRUE TRUE TRUE TRUE FALSE
# a 1 2 2 1 3
# b 1,2 1,2 1,2 1,2 1,2