环境 namespace:ggplot2 和 package:ggplot2 之间的区别

difference between environment namespace:ggplot2 and package:ggplot2

提问人:cloudscomputes 提问时间:5/8/2023 最后编辑:moodymudskippercloudscomputes 更新时间:5/10/2023 访问量:53

问:

当我运行以下代码时:

pryr::parenvs(ggplot, TRUE)

我得到了以下结果:

标签名称
1 <environment: namespace:ggplot2> “” 2 <environment: 0x000001ecc58339e0> “imports:ggplot2” 3 <environment: namespace:base> “” 4 <environment: R_GlobalEnv> “” 5 <environment: package:testthat> “package:testthat”



6 <环境:package:devtools>“package:devtools” 7 <环境: package:usethis> “package:usethis” 8 <环境: package:ggplot2> “package:ggplot2” 9 <环境: package:pryr> “package:pryr” 10 <环境: 0x000001ecc63f3d88> “tools:rstudio” 11 <环境: package:stats> “package:stats” 12 <环境: package:graphics> “package:graphics”




13 <环境:package:grDevices> “package:grDevices” 14 <环境:package:utils> “package:utils” 15 <环境:package:datasets> “package:datasets”
16 <环境:package:methods>“package:methods” 17 <环境:0x000001ecc3d1a978>“自动加载” 18 <环境:base>“” 19 <环境:R_EmptyEnv>“”


我看到ggplot2出现了两次,一次在命名空间中,另一次在包中

有什么区别?

R 命名空间

评论

0赞 thelatemail 5/8/2023
我从pryr包中收集到这个?parenvs
0赞 cloudscomputes 5/8/2023
是的,它来自pryr

答:

1赞 cloudscomputes 5/8/2023 #1

我自己找到了答案并发布在这里:答案源链接

每个命名空间环境都有相同的祖先集,如图 11.4 所示:enter image description here

每个命名空间都有一个导入环境,该环境可以包含与另一个包中定义的包使用的函数的绑定。导入环境由包开发人员使用 NAMESPACE 文件控制。具体来说,importFrom() 和 imports() 等指令填充此环境。

显式导入每个基本函数会很烦人,因此 imports 环境的父级是基本命名空间。基本命名空间包含与基本环境相同的绑定,但它具有不同的父级。

基本命名空间的父级是全局环境。这意味着,如果未在导入环境中定义绑定,则包将以通常的方式查找它。这通常是一个坏主意(因为它使代码依赖于其他加载的包),因此 R CMD 检查会自动警告此类代码。之所以需要它,主要是由于历史原因,特别是由于 S3 方法调度的工作方式。

重要的是命名空间 env 包含作者在包中定义的所有函数,而包 env 仅包含作者希望您看到的函数

评论

0赞 moodymudskipper 5/10/2023
命名空间包括包中定义的所有对象(包括函数)。软件包 env 包含导出的数据,+ 包含的数据(例如)vs + 软件包重新导出的导入(例如 在 dplyr 中)getNamespaceInfo(ns, "lazydata")dplyr::band_members%>%