有没有办法以编程方式区分包环境和非包环境对象?例如,下面的对象x
和y
都是环境,具有相同的类和属性。
x <- as.environment(cars)
y <- getNamespace("graphics")
然而,根据print
方法判断存在差异:
> print(x)
<environment: 0x1d38118>
> print(y)
<environment: namespace:graphics>
现在假设我有一个任意对象,我怎样才能确定它是哪一个(不看print
的输出)?我想知道这个,以确定如何将对象存储在磁盘上。在前者的情况下,我需要存储环境的列表表示(可能还有它的父节点),但对于后者,我只存储包的名称和版本。
答案 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"