&引用;缺少需要TRUE/FALSE的值“;运行R闪亮应用程序时

&引用;缺少需要TRUE/FALSE的值“;运行R闪亮应用程序时,r,shiny,R,Shiny,我对创建R闪亮的应用程序很陌生。到目前为止,我正在制作我的应用程序的一部分,我试图根据选择要分析的变量生成不同的图。我将使用内置的数据集iris作为示例 library(shiny) library(tidyverse) ui <- fluidPage( titlePanel("Title"), sidebarLayout( sidebarPanel("Create plots of mean variables by species. ", va

我对创建R闪亮的应用程序很陌生。到目前为止,我正在制作我的应用程序的一部分,我试图根据选择要分析的变量生成不同的图。我将使用内置的数据集
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)
库(闪亮)
图书馆(tidyverse)
ui%
顶部(平均值,最小值)%>%
ggplot(aes(x=重新排序(物种,平均值),y=平均值))+
geom_col()+
实验室(x=“种类”,y=粘贴(“平均值”,toString(符号(变量)))+
ggtitle(粘贴(“平均值”)、toString(符号(变量))、“按种类”)+
coord_flip()
}

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

问题在于绘图功能,而不是
代码。将带引号的变量名传递给
过滤器的方法不起作用。看看有没有这样的。在你的函数中,这看起来像

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()
}
物种分布图%
组别(种类)%>%
过滤器(种类!=“”)%>%
汇总(平均值=平均值(!!符号(变量)))%>%
顶部(平均值,最小值)%>%
ggplot(aes(x=重新排序(物种,平均值),y=平均值))+
geom_col()+
实验室(x=“种类”,y=粘贴(“平均值”,变量))+
ggtitle(粘贴(“平均值”,变量,“按物种”))+
coord_flip()
}
请注意,这也意味着您不需要函数后面的所有
toString(sym(variable))
内容。它已经是一个字符串,所以只需传递
变量


作为旁注,我认为
top\n
也没有像您认为的那样在该函数中发挥作用。运行
summary
后,每个组只有一个值,因此
top\n
会抛出一条错误消息。该函数无论如何都可以工作,因为它只是忽略了那个不合逻辑的调用,然后继续。但是,无论您试图在那里做什么,您都需要做不同的事情。

问题在于打印功能,而不是闪亮的
代码。将带引号的变量名传递给
过滤器的方法不起作用。看看有没有这样的。在你的函数中,这看起来像

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()
}
物种分布图%
组别(种类)%>%
过滤器(种类!=“”)%>%
汇总(平均值=平均值(!!符号(变量)))%>%
顶部(平均值,最小值)%>%
ggplot(aes(x=重新排序(物种,平均值),y=平均值))+
geom_col()+
实验室(x=“种类”,y=粘贴(“平均值”,变量))+
ggtitle(粘贴(“平均值”,变量,“按物种”))+
coord_flip()
}
请注意,这也意味着您不需要函数后面的所有
toString(sym(variable))
内容。它已经是一个字符串,所以只需传递
变量

作为旁注,我认为
top\n
也没有像您认为的那样在该函数中发挥作用。运行
summary
后,每个组只有一个值,因此
top\n
会抛出一条错误消息。该函数无论如何都可以工作,因为它只是忽略了那个不合逻辑的调用,然后继续。但无论你想在那里做什么,你都需要做不同的事情