保持基础包未被屏蔽

时间:2017-05-06 09:37:22

标签: r packages

现在两次我遇到了base函数被其他软件包掩盖的问题。有没有办法将其他包加载到库中,但不能让它们掩盖base包?

1 个答案:

答案 0 :(得分:3)

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

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

DO

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

其中::运算符表示调用从给定名称空间导出的函数。你可能会遇到问题,但它们应该很少。

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

如果您不想这样做,那么您可以在base功能前加base::作为前缀。这是对基本包中的函数的显式引用,因此将忽略具有相同名称的其他函数。

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