您现在可能已经查看了帮助页面,:: 的使用有助于访问该特定包中的确切功能。当您加载dplyr 时,您可能会收到如下消息..
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
因此,例如,如果您想使用 dplyr 或基本包中的 intersect 函数,则需要使用 :: 双冒号指定。用法如下
mtcars$model <- rownames(mtcars)
first <- mtcars[1:20, ]
second <- mtcars[10:20, ]
dplyr::intersect(first, second)
base::intersect(first, second)
更新:添加额外说明
注意:加载库的顺序决定了特定函数的优先访问权限。不同包的开发者倾向于使用相同的函数名。但是,当 R 遇到一个函数时,它会按顺序运行特定会话已加载的不同库。您可以通过运行(.packages())
在会话中检查包
[1] "tidyr" "data.table" "dplyr" "stats"
[5] "graphics" "grDevices" "utils" "datasets"
[9] "methods" "base"
正如您在上面的示例会话中看到的,tidyr 是我加载的最后一个库,它是 r 会话的第一个条目。因此,当您在代码中使用任何函数时,首先在 tidyr -> 中搜索它,然后在 data.table -> 然后 dplyr 等等,最后查找 base 包。因此,在此过程中,当包之间存在函数名称重叠时,加载最后一个的包会掩盖之前的包。为了避免这种屏蔽,您可以在 R 代码中指定查找函数的位置。因此,这里base::intersect 将使用基础库中的函数而不是dplyr。或者,您可以使用来避免加载完整的库。这有积极和消极的一面。阅读链接并了解更多信息。
运行并检查差异。
这里有一些资源供您了解。
Compare library(), require(), ::
Namespace