我正在与R shiny合作构建一个简单的绘图应用程序,我不认为我真的理解checkboxGroupInput
是如何工作的,来自R闪亮应用程序网站的文档也没有太大帮助,所以我希望得到一些澄清。
这就是我的checkboxGroupInput
的样子:
checkboxGroupInput("trend1DisplayOptions", "Graph Display Options",
choiceNames = list("Connect Data Points", "Display Loess Smoother with Uncertainty Bounds"),
choiceValues = list("connect", "loess"),
selected = "connect")
因此,我基本上希望显示4种不同的“类型”图,具体取决于选择的复选框(是否显示黄土/连接点)。
在我的server
代码中,这里是if/else
语句:
if (input$trend1DisplayOptions == "connect" && input$trend1DisplayOptions != "loess") {
# Only connect points
p <- plot_ly(x = df2$labels, y = df2$values, type = 'scatter', mode='lines+markers') %>%
layout(xaxis = list(type = "category"))
p
# Probably wrong way to check
} else if (input$trend1DisplayOptions == "connect" && input$trend1DisplayOptions == "loess") {
# Should display nothing
# Probably wrong way to check
} else if (input$trend1DisplayOptions != "connect" && input$trend1DisplayOptions == "loess") {
# Should display nothing
} else if (is.null(input$trend1DisplayOptions)) {
# Should show
p <- plot_ly(x = x_labels, y = df$values, type = 'scatter') %>%
layout(xaxis = list(type = "category"), title = input$trendTitle)
p
}
我遇到的问题是,当选中两个复选框时,shiny
应用程序应该不显示任何内容,但它仍会显示第一个if
语句中的图(即只选择“connect”时)。并且,当两者都没有被选中时,我得到一个missing value where TRUE/FALSE needed
错误。
我对checkboxGroupInput
有什么误解?
我可以看到问题是假设输入值同时等于2件事。那么,检查复选框1是否被选中而复选框2不是正确的方法是什么,反之亦然?此外,我已经在这个论坛上搜索了如何处理这两个都没有被选中,而且似乎is.null()
是正确的方法。为什么它不适合我的情况?
看起来我误读了S.O.答案。我应该使用%in%
和!(... %in% ...)
来检查组合。
如果有人需要,这是正确的版本:
if ("connect" %in% input$trend1DisplayOptions && !("loess" %in% input$trend1DisplayOptions)) {
p <- plot_ly(x = df2$labels, y = df2$values, type = 'scatter', mode='lines+markers') %>%
layout(xaxis = list(type = "category"))
p
} else if (!("connect" %in% input$trend1DisplayOptions) && "loess" %in% input$trend1DisplayOptions) {
# Should display nothing
} else if ("connect" %in% input$trend1DisplayOptions && "loess" %in% input$trend1DisplayOptions) {
# Should display nothing
} else if (is.null(input$trend1DisplayOptions)) {
p <- plot_ly(x = df2$labels, y = df2$values, type = 'scatter') %>%
layout(xaxis = list(type = "category"), title = input$trendTitle)
p
}