Как отличить среду пространства имен пакета от других объектов среды

Есть ли какой-либо способ программно различать среды пакета и объекты среды не пакета? Например, объекты 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"    
Другие вопросы по тегам