Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解决R中函数名冲突的最佳方法是什么?_R - Fatal编程技术网

解决R中函数名冲突的最佳方法是什么?

解决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

在加载几个包来处理某些数据时,我在尝试使用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%>%
  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)