如何区分包命名空间环境与其他环境对象

Jer*_*oen 3 r cran

有没有办法以编程方式区分包环境和非包环境对象?例如,对象x及其y下面都是环境,具有相同的类和属性.

x <- as.environment(cars)
y <- getNamespace("graphics")
Run Code Online (Sandbox Code Playgroud)

但从print方法来看,存在差异:

> print(x)
<environment: 0x1d38118>
> print(y)
<environment: namespace:graphics>
Run Code Online (Sandbox Code Playgroud)

现在假设我有一个任意对象,我怎样才能确定它是哪一个(不看输出print)?我想知道这个,以确定如何将对象存储在磁盘上.在前者的情况下,我需要存储环境的列表表示(可能还有它的父项),但对于后者,我只会存储包的名称和版本.

Jos*_*ien 10

isNamespace

isNamespace(y)
# [1] TRUE
isNamespace(x)
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

并且,为了将来参考,apropos当你有这样的问题时,通常会有所帮助.

apropos("namespace")
#  [1] "..getNamespace"         ".BaseNamespaceEnv"      ".getNamespace"         
#  [4] ".methodsNamespace"      "asNamespace"            "assignInMyNamespace"   
#  [7] "assignInNamespace"      "attachNamespace"        "fixInNamespace"        
# [10] "getFromNamespace"       "getNamespace"           "getNamespaceExports"   
# [13] "getNamespaceImports"    "getNamespaceInfo"       "getNamespaceName"      
# [16] "getNamespaceUsers"      "getNamespaceVersion"    "isBaseNamespace"       
# [19] "isNamespace"            "loadedNamespaces"       "loadingNamespaceInfo"  
# [22] "loadNamespace"          "namespaceExport"        "namespaceImport"       
# [25] "namespaceImportClasses" "namespaceImportFrom"    "namespaceImportMethods"
# [28] "packageHasNamespace"    "parseNamespaceFile"     "requireNamespace"      
# [31] "setNamespaceInfo"       "unloadNamespace"    
Run Code Online (Sandbox Code Playgroud)