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

时间:2013-11-12 19:09:47

标签: r cran

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

x <- as.environment(cars)
y <- getNamespace("graphics")

然而,根据print方法判断存在差异:

> print(x)
<environment: 0x1d38118>
> print(y)
<environment: namespace:graphics>

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

1 个答案:

答案 0 :(得分:10)

isNamespace

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"