柱状图代码可运行,但编织为flexdashboard/R Notebook时出错
解决flexdashboard/R Notebook中ggplot+filter的
match.arg(method)错误 嘿,我一下子就找到你问题的根源啦!这个Error in match.arg(method) : 'arg' must be NULL or a character vector报错,本质是你不小心用了base R的filter()函数,而不是dplyr包中用来筛选数据的那个filter()。
为啥会出错?
你在代码开头的setup块里只加载了flexdashboard和ggplot2,但没加载dplyr(或者包含dplyr的tidyverse套装包)。当你在ggplot(data= filter(...))里调用filter时,R默认调用了base R自带的filter()——这个函数是给时间序列做滤波用的,参数要求和你要做的数据筛选完全不搭,所以直接触发了错误。
怎么解决?
1. 先加载正确的包
在setup代码块里加上dplyr或者tidyverse的加载(我更推荐tidyverse,因为它一次性包含了ggplot2、dplyr等你大概率会用到的包):
```{r setup, include=FALSE} library("flexdashboard") library("tidyverse") # 替代单独的library("ggplot2"),同时加载dplyr load("K:/Research/Jamie/R/#6/stl7172.Rda")
如果你不想加载整个tidyverse,也可以单独加一行加载`dplyr`: ```markdown ```{r setup, include=FALSE} library("flexdashboard") library("ggplot2") library("dplyr") # 新增这一行,加载数据筛选用的filter函数 load("K:/Research/Jamie/R/#6/stl7172.Rda")
#### 2. 优化你的filter语句(可选但更规范) 你的filter条件里,`stl7172$MET2013`不需要加数据集前缀(因为已经在filter的第一个参数指定了`stl7172`作为数据源),同时可以用更简洁的`%in%`写法替代多个`|`,代码会更清爽: ```markdown ```{r} ggplot(data= filter(stl7172, SEX %in% c("Male", "Female"), MET2013 == "STL_MSA"), aes(x = SEX, y = INCTOT, fill = RACE)) + geom_bar(stat = "summary", position= position_dodge(), width = .9) + labs( title="Mean Income Level for Workers in the Leisure & Hospitality Industry", subtitle= "(St. Louis MSA, by race and sex)", caption = "(Source: IPUMS)" )
做完这两步,再重新编织你的flexdashboard或R Notebook,应该就能正常生成图表啦! 内容的提问来源于stack exchange,提问作者jayvo
相关产品推荐
相关产品推荐

