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::selectplyr::summarisestats::filter之间发生冲突,尤其是在加载通过库加载其中一个库的包时(它们不应该,但仍有一些仍然会)或者在加载dplyr你的.Rprofile (不要!)。 这可能会导致相当模糊的问题,并不总是一个错误信息,特别是与plyr冲突。

我只是最近才了解到conflicts()函数。 这很有用,但是当两个软件包具有相同的function时,例如tidyr :: %>%和dplyr :: %>%产生“过度报告”冲突。

所以我写了一个函数来告诉我,如果我发疯,或者实际上是否有导致当前错误的冲突。 它不仅检查冲突,还检查某个需要的包是否是“顶层”的,以及该函数的实体是否有所不同。

它默认为dplyr执行此操作,但是您可以使用want_package参数指定另一个软件包。 例如,我经常被recodealpha绊倒,这些都被重复使用在很多软件包中。

用法很简单: 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)