我在Rbloggers上看了一个教程,发现了双冒号的用法,我在网上看了看,但我找不到它们的用法的解释。下面是一个使用它们的示例。
df <- dplyr::data_frame(
year = c(2015, NA, NA, NA),
trt = c("A", NA, "B", NA)
)我知道它创建了一个数据框架,但我不明白它们的用途。
发布于 2016-02-07 00:36:27
到目前为止,您可能已经查看过帮助页面,使用::可以帮助访问特定包中的确切函数。当您加载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
发布于 2016-02-06 20:31:29
在多个包中可能有多个同名的函数。双冒号运算符允许您指定所需的特定函数:
package::functionnamehttps://stackoverflow.com/questions/35240971
复制相似问题