解决R中函数名冲突的最佳方法是什么?
在加载几个包来处理某些数据时,我在尝试使用dplyr包中的select函数时收到一个错误。我试着给我用一个新的包,MASS,这样我就可以很容易地诊断并使事情正常工作。不过,这一经历让我好奇,在一个有许多包的世界中,如何以最佳方式工作,其中的函数相互冲突 考虑以下代码和错误消息:解决R中函数名冲突的最佳方法是什么?,r,R,在加载几个包来处理某些数据时,我在尝试使用dplyr包中的select函数时收到一个错误。我试着给我用一个新的包,MASS,这样我就可以很容易地诊断并使事情正常工作。不过,这一经历让我好奇,在一个有许多包的世界中,如何以最佳方式工作,其中的函数相互冲突 考虑以下代码和错误消息: library(dplyr) library(MASS) df<-data.frame(Lobsters=c(1,3,4,5,7,1),Llamas=c(7,1,2,5,8,3)) df2<-df%&g
library(dplyr)
library(MASS)
df<-data.frame(Lobsters=c(1,3,4,5,7,1),Llamas=c(7,1,2,5,8,3))
df2<-df%>%
select(Lobsters)
不过,我想知道:
在诊断相同命名函数的问题时是否有最佳实践,除了在加载包时屏蔽以下对象的消息之外
我的dplyr::select方法是解决这些冲突的最佳方法吗
最终,我当前的策略是加载具有选择功能的包,我将在使用较少版本的包之后使用更多的选择功能。使用dplyr::select可避免歧义。在我看来,这是你能做的最好的了
不调用librarydplyr的缺点是管道不可用。您仍然可以使用librarymagrittr来获得它。或者,如果您不想附加包,也可以查看非常有用的尼斯导入包。基本上,如果导入::frommagrittr,%%>%,则可以使用管道而不附加任何包 这里有一些可以做的事情 发出库语句时,R将列出所有冲突。注意这些!如果以后需要了解冲突,请输入:conflicts 在库R3.6及更高版本上使用exclude参数。e、 g.图书馆质量,排除=选择。dplyr会对基本延迟和筛选进行筛选,因此您可能希望养成常规排除这些延迟的习惯:librarydplyr,exclude=cfilter,lag-One仍然可以使用dplyr::lag等来访问它们 如果发现符号已被屏蔽,请使用dplyr::select符号 拆下不再使用的任何软件包,例如detachpackage:MASS 在某些情况下,屏蔽是良性的,因为新版本是向后兼容的,在这些情况下,没有必要避免冲突 正如@LenGreski在评论中指出的,包订单将决定任何冲突的解决方案。在发生冲突的情况下,每个包都会覆盖之前加载的所有包
也有一些包来解决冲突的问题,包括@ MrFlick所提到的,这些都是在CRAND上的,而第二个包也不是在CRAN上。
一个要考虑添加到列表中的项目是包加载顺序。如果不需要MASS::select,可以在dplyr之前加载MASS,然后使用select的dplyr版本。df2_alt<-df%>%
dplyr::select(Lobsters)