Как отличить среду пространства имен пакета от других объектов среды
Есть ли какой-либо способ программно различать среды пакета и объекты среды не пакета? Например, объекты x
а также y
ниже представлены обе среды с одним и тем же классом и атрибутами.
x <- as.environment(cars)
y <- getNamespace("graphics")
Однако, судя по print
По методу есть разница:
> print(x)
<environment: 0x1d38118>
> print(y)
<environment: namespace:graphics>
Теперь предположим, что у меня есть произвольный объект, как я могу определить, какой из двух он есть (не глядя на вывод print
)? Я хотел бы знать это, чтобы определить, как хранить объект на диске. В случае первого мне нужно сохранить представление списка среды (и, возможно, ее родителей), но для второго я бы просто сохранил имя и версию пакета.
1 ответ
Решение
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"