提问人:cloudscomputes 提问时间:5/8/2023 最后编辑:moodymudskippercloudscomputes 更新时间:5/10/2023 访问量:53
环境 namespace:ggplot2 和 package:ggplot2 之间的区别
difference between environment namespace:ggplot2 and package:ggplot2
问:
当我运行以下代码时:
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出现了两次,一次在命名空间中,另一次在包中
有什么区别?
答:
我自己找到了答案并发布在这里:答案源链接
每个命名空间都有一个导入环境,该环境可以包含与另一个包中定义的包使用的函数的绑定。导入环境由包开发人员使用 NAMESPACE 文件控制。具体来说,importFrom() 和 imports() 等指令填充此环境。
显式导入每个基本函数会很烦人,因此 imports 环境的父级是基本命名空间。基本命名空间包含与基本环境相同的绑定,但它具有不同的父级。
基本命名空间的父级是全局环境。这意味着,如果未在导入环境中定义绑定,则包将以通常的方式查找它。这通常是一个坏主意(因为它使代码依赖于其他加载的包),因此 R CMD 检查会自动警告此类代码。之所以需要它,主要是由于历史原因,特别是由于 S3 方法调度的工作方式。
重要的是命名空间 env 包含作者在包中定义的所有函数,而包 env 仅包含作者希望您看到的函数
评论
getNamespaceInfo(ns, "lazydata")
dplyr::band_members
%>%
评论
parenvs