我有以下 Rmarkdown:
---
title: "Untitled"
runtime: shiny
output:
flexdashboard::flex_dashboard:
theme: bootstrap
orientation: columns
vertical_layout: scroll
---
```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
```
Column {data-width=650}
-----------------------------------------------------------------------
```{r}
sidebarPanel( textInput("flowers", "flower name(s)", "virginica, setosa") )
mainPanel(
renderPrint({
flower_list <- unlist(lapply(strsplit(input$flowers, ",")[[1]], tolower))
dat <- iris %>% filter(Species %in% flower_list)
unique(dat$Species)
})
)
```
基本上它的作用是获取用户的输入并返回列表 过滤后的名字。但似乎不起作用:
例如,主面板应返回两个值virginia setosa
。
正确的做法是什么?
在控制台中它工作正常:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
dat <- iris %>%
filter(Species %in% c("virginica","setosa"))
unique(dat$Species)
#> [1] setosa virginica
#> Levels: setosa versicolor virginica
最佳答案
这是因为 virginia
之间有空格和setosa
在sidebarPanel( textInput("flowers", "flower name(s)", "virginica, setosa") )
。您可以通过修改代码来删除空格或删除空格,如下所示:
flower_list <- trimws(unlist(lapply(strsplit(input$flowers, ",")[[1]], tolower)))
关于r - 如何使向量中的 dplyr::filter 在 Shiny 应用程序中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44061817/