R Shiny checkboxGroupInput - 基于不同组合的动作?

问题描述 投票:0回答:1

我正在与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()是正确的方法。为什么它不适合我的情况?

r shiny
1个回答
1
投票

看起来我误读了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

}
© www.soinside.com 2019 - 2024. All rights reserved.