在闪亮的应用程序中选择多个输入时,为啥错误取决于选择输入的顺序?

Posted

技术标签:

【中文标题】在闪亮的应用程序中选择多个输入时,为啥错误取决于选择输入的顺序?【英文标题】:When selecting multiple inputs in a shiny app, why does the error depend on the order that the inputs were selected?在闪亮的应用程序中选择多个输入时,为什么错误取决于选择输入的顺序? 【发布时间】:2017-10-27 17:06:19 【问题描述】:

我有一个带有 runtime: shiny 的 flexdashboard 文档(我在此处发布了应用程序 https://arie.shinyapps.io/reproducible_example/ 并嵌入了代码,但也想将代码放在下面,以防应用程序超出其在 shinyapps.io 上的分配使用量):

--- title: "Example" runtime: shiny output: flexdashboard::flex_dashboard: source_code: embed ---

给定以下示例数据集:

```r setup, include=FALSE
library(flexdashboard)
library(tidyverse)

df <- tibble(name = c("peter", "paul", "mary"), 
         value = c(1:3))
```

我希望能够从以下用户界面进行多项选择:

Column data-width=250, .sidebar
-----------------------------------------------------------------------

```r

# creates interface
selectInput("name_input", label = "Name", choices = df$name,
        selected = NULL, multiple = TRUE, selectize = TRUE)

```

并对选择有一个 ggplot “反应”。所以我做了一个反应数据集:

```r
# reactive data
df_reactive <- reactive(df[df$name == input$name_input,])

```

并创建以下图:

Column data-width=750
-----------------------------------------------------------------------

### Chart B

```r
renderPlot(
 ggplot(df_reactive(), aes(x = input$name_input, y = value) ) +
  geom_col()
 )
```

现在,当我 Run Document 并首先选择 peter,然后选择 paul,然后选择 mary 时,情节的反应完全符合预期:每次添加名称时都会添加一个条形。例如,当我先选择paul 然后选择peter 时,就会出现问题,这会引发错误Aesthetics must be either length 1 or the same as the data (2): x, y

在静态图表的上下文中,这个错误对我来说是有意义的,但我对为什么选择名称的顺序很重要以及如何解决它感到困惑。

【问题讨论】:

是否应该将df_reactive &lt;- reactive(df[df$name == input$name_input,]) 替换为df_reactive &lt;- reactive(df[df$name %in% input$name_input,]) 是的!非常感谢! 很高兴它有帮助!我会把它作为答案发布,.. 【参考方案1】:

问题出在:

df_reactive <- reactive(df[df$name == input$name_input,])

如果length(input$name_input) df$name 中的每个元素是否包含在input$name_input 中。幸运的是,在 R 中有一个快捷方式,因此您不必使用 for 循环或 sapply(),...

就像我在 cmets 中写的那样:df_reactive &lt;- reactive(df[df$name %in% input$name_input,]) 也可以。

有关符号的更多详细信息,我会参考现有答案,因为那时答案将变得更加重复。 ==%in% 之间的区别在这里解释: difference between `%in%` VS `==`

【讨论】:

以上是关于在闪亮的应用程序中选择多个输入时,为啥错误取决于选择输入的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

更改输入时闪亮会抛出警告:错误:无法提取不存在的列

闪亮的动态/条件过滤选择多个输入(selectizeInput,多个= TRUE)

使用 rhandsontable 包在闪亮上编辑多个数据框

用于多个输入的闪亮 updateSelectInput

使用 ggplot facets 时增加闪亮的绘图大小

取决于输入的闪亮应用程序填充输出不起作用