3

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

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

但是从print方法上看还是有区别的:

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

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

4

1 回答 1

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"    
于 2013-11-12T19:22:28.970 回答