首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的双冒号(::)是什么?

R中的双冒号(::)是什么?
EN

Stack Overflow用户
提问于 2016-02-06 20:27:07
回答 2查看 42.9K关注 0票数 37

我在Rbloggers上看了一个教程,发现了双冒号的用法,我在网上看了看,但我找不到它们的用法的解释。下面是一个使用它们的示例。

代码语言:javascript
复制
df <- dplyr::data_frame(
  year = c(2015, NA, NA, NA), 
  trt = c("A", NA, "B", NA)
)

我知道它创建了一个数据框架,但我不明白它们的用途。

EN

回答 2

Stack Overflow用户

发布于 2016-02-07 00:36:27

到目前为止,您可能已经查看过帮助页面,使用::可以帮助访问特定包中的确切函数。当您加载dplyr时,您可能会收到如下消息。

代码语言:javascript
复制
The following objects are masked from ‘package:base’:
       intersect, setdiff, setequal, union

因此,例如,如果您想使用dplyr或基本包中的intersect函数,则需要指定使用::双冒号。用法如下

代码语言:javascript
复制
mtcars$model <- rownames(mtcars)
first <- mtcars[1:20, ]
second <- mtcars[10:20, ]
dplyr::intersect(first, second)
base::intersect(first, second)

更新:添加了额外的解释

注意:加载库的顺序决定了对特定函数的优先访问。不同包的开发人员倾向于使用相同的函数名。但是,当R遇到一个函数时,它会按顺序运行特定会话加载的不同库。您可以通过运行(.packages())来检查会话中的包

代码语言:javascript
复制
 [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

票数 44
EN

Stack Overflow用户

发布于 2016-02-06 20:31:29

在多个包中可能有多个同名的函数。双冒号运算符允许您指定所需的特定函数:

代码语言:javascript
复制
package::functionname
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35240971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档