dplyr :: select函数与MASS :: select发生冲突
如果我加载MASS
包:
library(MASS)
然后加载试图运行dplyr::select
,我得到一个错误:
library(dplyr) mtcars %.% select(mpg) # Error in select(`__prev`, mpg) : unused argument (mpg)
我如何使用dplyr::select
加载MASS
包?
正如帕斯卡所说,下面的工作
require(MASS) require(dplyr) mtcars %>% dplyr::select(mpg)
这比我应该承认的更频繁地发生在我身上。 dplyr与MASS::select
, plyr::summarise
和stats::filter
之间发生冲突,尤其是在加载通过库加载其中一个库的包时(它们不应该,但仍有一些仍然会)或者在加载dplyr你的.Rprofile
(不要!)。 这可能会导致相当模糊的问题,并不总是一个错误信息,特别是与plyr
冲突。
我只是最近才了解到conflicts()
函数。 这很有用,但是当两个软件包具有相同的function时,例如tidyr :: %>%
和dplyr :: %>%
产生“过度报告”冲突。
所以我写了一个函数来告诉我,如果我发疯,或者实际上是否有导致当前错误的冲突。 它不仅检查冲突,还检查某个需要的包是否是“顶层”的,以及该函数的实体是否有所不同。
它默认为dplyr执行此操作,但是您可以使用want_package
参数指定另一个软件包。 例如,我经常被recode
和alpha
绊倒,这些都被重复使用在很多软件包中。
用法很简单: amigoingmad()
。
默认情况下,如果dplyr不是“在上面”,它也会自动“修复”,使用下面的命令:
detach("package:dplyr", character.only = TRUE) library("dplyr", character.only = TRUE)
请注意,函数将报告用户指定的函数是否阻塞dplyr,但出于安全考虑,不会自动解决这个问题(只是在这种情况下删除函数)。
到目前为止,这个解决scheme并没有给我带来任何问题。 当然,我不会主张在生产代码中使用它,但是当你正在debugging一个.Rmd
文件,并且可能已经搞乱了加载顺序,这是一个快速查找的方法。
如果你想在一个包中:
devtools::install_github("rubenarslan/formr")
如果你先载入MASS
库,然后dplyr
library (MASS) library (dplyr)
那么会话searchpaths ()
中的select
函数的第一个版本将是dplyr
库中的一个。
于是
select(mtcars, mpg)
将工作
dplyr::select(mtcars, mpg)