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

3
有没有办法在编程中区分包环境和非包环境对象?例如,下面的对象x和y都是环境,具有相同的类和属性。
x <- as.environment(cars)
y <- getNamespace("graphics")

然而从 print 方法来看,有所不同:
> print(x)
<environment: 0x1d38118>
> print(y)
<environment: namespace:graphics>

现在假设我有一个任意的对象,我该如何确定它是其中的哪一个(不查看print的输出)?我希望知道这个以便决定如何将对象存储到磁盘上。如果是前者,我需要存储环境的列表表示(可能还包括其父级),但对于后者,我只需存储软件包的名称和版本号。

1个回答

11

是否为命名空间

isNamespace(y)
# [1] TRUE
isNamespace(x)
# [1] FALSE

还有,作为将来的参考,当你遇到这样的问题时,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"    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接