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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R Shiny checkboxGroupInput - 基于不同组合的动作?相关的知识,希望对你有一定的参考价值。

我正在与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

}

以上是关于R Shiny checkboxGroupInput - 基于不同组合的动作?的主要内容,如果未能解决你的问题,请参考以下文章

R + Shiny 哪个锤子?直的 Shiny、flexdashboard 还是 shinydashboard? [关闭]

构建Shiny应用

RStudio 服务器 Shiny 上的 R Shiny dev 应用程序启动时崩溃

R shiny教程-2:布局用户界面

R/Shiny 图不显示在浏览器中

R 中 Shiny 中的时间序列预测; Shiny 显示 unix 纪元时间