2017-05-06 82 views
0

两次现在我遇到了base函数被其他包掩盖的问题。有没有办法将其他软件包加载到库中,但不允许它们屏蔽base软件包?保持基础包不被掩盖

回答

3

一般来说,使用软件包总是可以使用,而不必将其名称空间附加到搜索路径。附加而不是加载是导致具有相同名称的功能相互冲突的原因。也就是说,不是

library(pkg) 
pkgfunc(a, b, ...) 

loadNamespace("pkg") 
pkg::pkgfunc(a, b, ...) 

其中::操作手段来调用从给定的命名空间中导出的函数。你可能会遇到问题,但他们应该很少。

对于来自其他语言的程序员,这比每次想要使用包时调用library()的R中的惯例更为熟悉。 (我确实觉得有点奇怪,在R制作包名称空间强制处理这个问题之后的几年中,人们仍然会将每个包加载到全局环境中。)

如果你不想这样做,那么你可以用base::代替base功能的前缀。这是对基本包中的函数的明确引用,因此将忽略具有相同名称的其他函数。

base::sum(1:10) 
base::list(a=1, b=2, c=3) 
+0

谢谢你这样的一个综合性答案。为什么不在每次加载包时都使用前缀而不是从名称空间导出(因为似乎您必须先使用前缀)? – Bonono