保持基础包不被屏蔽
keep base package unmasked
现在我遇到了两次 base
函数被其他包屏蔽的问题。有没有一种方法可以将其他包加载到库中,但又不让它们掩盖 base
包?
一般来说,总是可以在不将它们的命名空间附加到搜索路径的情况下使用包。附加,而不是加载,是导致同名函数相互冲突的原因。也就是说,而不是
library(pkg)
pkgfunc(a, b, ...)
做
loadNamespace("pkg")
pkg::pkgfunc(a, b, ...)
其中 ::
运算符表示调用从给定命名空间导出的函数。您可能 运行 遇到问题,但它们应该很少。
对于来自其他语言的程序员来说,这比 R 中每次要使用包时调用 library()
的通常做法更加熟悉。 (我确实觉得有点奇怪,在 R 强制使用包命名空间来处理这个问题多年之后,人们仍然将每个包加载到全局环境中。)
如果您不想这样做,则可以在 base
函数前加上 base::
前缀。这是对基础包中函数的显式引用,因此将忽略同名的其他函数。
base::sum(1:10)
base::list(a=1, b=2, c=3)
现在我遇到了两次 base
函数被其他包屏蔽的问题。有没有一种方法可以将其他包加载到库中,但又不让它们掩盖 base
包?
一般来说,总是可以在不将它们的命名空间附加到搜索路径的情况下使用包。附加,而不是加载,是导致同名函数相互冲突的原因。也就是说,而不是
library(pkg)
pkgfunc(a, b, ...)
做
loadNamespace("pkg")
pkg::pkgfunc(a, b, ...)
其中 ::
运算符表示调用从给定命名空间导出的函数。您可能 运行 遇到问题,但它们应该很少。
对于来自其他语言的程序员来说,这比 R 中每次要使用包时调用 library()
的通常做法更加熟悉。 (我确实觉得有点奇怪,在 R 强制使用包命名空间来处理这个问题多年之后,人们仍然将每个包加载到全局环境中。)
如果您不想这样做,则可以在 base
函数前加上 base::
前缀。这是对基础包中函数的显式引用,因此将忽略同名的其他函数。
base::sum(1:10)
base::list(a=1, b=2, c=3)