【问题标题】:"Missing value where TRUE/FALSE needed" when running R Shiny app运行 R Shiny 应用程序时出现“需要 TRUE/FALSE 的缺失值”
【发布时间】:2020-03-13 16:56:42
【问题描述】:

我是创建 R Shiny 应用程序的新手。到目前为止,我正在制作我的应用程序的一部分,我试图根据选择要分析的变量生成不同的图。我将以内置数据集iris 为例。

library(shiny)
library(tidyverse)

ui <- fluidPage(
  titlePanel("Title"),
  sidebarLayout(
    sidebarPanel("Create plots of mean variables by species. ",
            varSelectInput("vars", h5("Choose a variable to display."),
                data = iris,
                selected = "Sepal.Length"),
                sliderInput("toprange", h5("Display Number of Species"),
                            min = 1, max = 3, value = 3)), 
                            #in my actual dataset there are more than 30 different levels.
    mainPanel(plotOutput("bars"))

  )
)

server <- function(input, output) {
  output$bars <- renderPlot({

    species_plot(input$vars, input$toprange)

  })
}

shinyApp(ui = ui, server = server)

这是用于创建绘图的函数:

species_plot <- function(variable, min) {
iris %>%
  group_by(Species) %>%
  filter(Species != "") %>% 
  summarize(avg = mean({{variable}})) %>% 
  top_n(avg, min) %>%
  ggplot(aes(x = reorder(Species, avg), y = avg)) +
  geom_col() +
  labs(x = "Species", y = paste("Mean", toString(sym(variable)))) +
  ggtitle(paste("Mean", toString(sym(variable)), "by Species")) +
  coord_flip()
}

当我运行应用程序时,侧边栏上的所有内容都会显示,但在主面板上会弹出一个错误“需要 TRUE/FALSE 的缺失值”,我不确定这是从哪里来的。例如,我在任何地方都看不到会输出此错误的条件。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    问题在于您的绘图功能,而不是您的shiny 代码。您用于将带引号的变量名称传递给 filter 的方法不起作用。请参阅this Q&A 了解相关信息。在你的函数中,这看起来像......

    species_plot <- function(variable, min) {
    iris %>%
      group_by(Species) %>%
      filter(Species != "") %>% 
      summarize(avg = mean(!!sym(variable))) %>% 
      top_n(avg, min) %>%
      ggplot(aes(x = reorder(Species, avg), y = avg)) +
      geom_col() +
      labs(x = "Species", y = paste("Mean", variable)) +
      ggtitle(paste("Mean", variable, "by Species")) +
      coord_flip()
    }
    

    请注意,这也意味着您也不需要函数后面的所有 toString(sym(variable)) 内容。它已经是一个字符串,所以只需传递variable

    作为旁注,我认为top_n 也没有做你认为它在该功能中所做的事情。运行summarize 后,每个组只有一个值,因此top_n 会抛出错误消息。该函数无论如何都可以工作,因为它只是忽略了那个不合逻辑的调用并继续前进。但无论你想在那里做什么,你都需要做不同的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2016-11-06
      • 2015-06-28
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      相关资源
      最近更新 更多