在加载plyr之后加载dplyr会导致问题。

5

测试用例:

library(dplyr)
library(plyr)
library(dplyr)
mtcars%>%rename(x=gear)

这会导致错误。非常感谢您的帮助。

如上所述,或重新启动R会话,然后首先加载dplyr。考虑使用ddplyer或其他更新的版本,它们可以更好地协同工作。 - Scransom
5
你也可以在函数调用中包含特定的包名来访问某个特定的包。例如,即使你在dplyr之后加载了plyr,你也可以使用dplyr::rename来调用dplyr的重命名函数,如mtcars %>% dplyr::rename(x=gear)。然而,一般来说最好先加载plyr再加载dplyr(假设你想要使用两个包中的函数),因为dplyr更快。或者,如果你想要使用dplyr遮盖的某个特定的plyr函数,你只需加载dplyr,然后使用例如plyr::rename的方式进行调用。 - eipi10
感谢您的评论。问题在于这是一个具有多个开发人员的大型代码库的一部分,因此分离可能不太实际。 - guna
1
@nongkrong 使用 detach() 永远不是一个好主意。 - hadley
@nongkrong 我不会那样做 ;) - hadley
2个回答

12

根据@hadley的推文,最佳答案是在加载dplyr之前始终加载plyr,并且不要再次加载plyr。以下是他的推文:


Hadley Wickham ‏@hadleywickham  Jul 27
@gunapemmaraju just load plyr before dplyr?

我认为你的意思是 而不是再次加载dplyr - Brian Wiley

5
当我再次引用plyr源文件时,出现了这个问题。你可以这样做:
if("dplyr" %in% (.packages())){
          detach("package:dplyr", unload=TRUE) 
          detach("package:plyr", unload=TRUE) 
} 
library(plyr)
library(dplyr)

哇,我尝试手动按不同顺序卸载和加载,但都不起作用,但这段代码解决了我的问题!谢谢! - Kirk Geier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接