现在两次我遇到了base
函数被其他软件包掩盖的问题。有没有办法将其他包加载到库中,但不能让它们掩盖base
包?
答案 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)