我正在关注Rbloggers中的一个教程并发现使用双冒号,我在线查看,但我找不到他们使用的解释。 以下是它们的使用示例。
df <- dplyr::data_frame(
year = c(2015, NA, NA, NA),
trt = c("A", NA, "B", NA)
)
据我所知,它会创建一个数据框,但我不明白它们的用途。
答案 0 :(得分:20)
由于您可能已经查找了帮助页面,因此使用::
有助于从该特定包中访问确切的功能。加载dplyr
时,您可能收到如下消息..
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
因此,例如,如果您想使用dplyr或base package中的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
是我加载的最后一个库,即第一个会话。因此,当您在代码中使用任何函数时,首先在tidyr
- &gt;中搜索它。然后data.table
- &gt;然后dplyr
等等,最后查找base
包。因此,在此过程中,当包之间存在功能名称重叠时,加载最后一个的功能名称将覆盖先前的功能名称。要避免此屏蔽,请在R代码中指定查找函数的位置。因此,这里base::intersect
将使用基库中的函数而不是dplyr
。或者,您可以使用以避免加载完整的库。这有积极的和消极的。阅读链接并了解更多信息。
运行并检查差异。 这里有一些资源供您理解。
答案 1 :(得分:8)
多个包中可能有多个具有相同名称的功能。双冒号运算符允许您指定所需的特定函数:
package::functionname