有没有办法以编程方式区分包环境和非包环境对象?例如,对象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)