调用带preserve参数的position_dodge()及更新ggplot2时遇报错求助
position_dodge(preserve="single")报错及rlang版本冲突问题 首先来说第一个报错:Error in position_dodge(preserve = "single") : unused argument (preserve = "single")。这事儿原因很直接——你的ggplot2版本太老了。preserve这个参数是ggplot2 2.3.0版本才正式加入的,你之前用的版本(比如2.2.1或者更早)根本没这个参数,R自然会说“这参数我没见过啊”。
然后是你更新ggplot2时碰到的rlang版本冲突问题。你试的那个2.2.1.900是旧的开发版,它依赖的rlang版本比你现在装的0.1.6要高,但R默认不会替换正在被其他包使用的旧版本包,所以就报错了。咱们一步步解决:
第一步:先搞定rlang的版本问题
因为旧版rlang被占用了,咱们先卸载再装最新版:
# 卸载现有rlang remove.packages("rlang") # 安装官方最新稳定版 install.packages("rlang")
要是上面的方法不行,就试试装rlang的开发版(得先装devtools):
# 先装devtools(如果还没装的话) install.packages("devtools") # 从GitHub装rlang最新开发版 devtools::install_github("r-lib/rlang")
第二步:安装支持preserve参数的ggplot2版本
解决完rlang,咱们就可以装能正常用position_dodge(preserve="single")的ggplot2了。推荐直接装最新的稳定版,比你之前试的旧开发版靠谱多了:
install.packages("ggplot2")
要是你需要最新的实验性功能,再装开发版:
devtools::install_github("tidyverse/ggplot2")
第三步:验证问题是否解决
重要提醒:一定要重启R再加载包,不然可能还有缓存冲突。重启后测试:
library(ggplot2) # 跑个测试代码看看 ggplot(mtcars, aes(x = factor(cyl), y = mpg, fill = factor(am))) + geom_boxplot(position = position_dodge(preserve = "single"))
能正常出图就说明没问题了。
另外给你个临时替代方案:如果你暂时没法更新ggplot2,也可以用position_dodge2(),它在旧版本里就支持preserve="single"的功能,把代码改成position_dodge2(preserve = "single")就行,效果是一样的。
内容的提问来源于stack exchange,提问作者b222

