2013-11-12 2 views
3

Есть ли способ программно различать среды пакетов и объекты среды, не относящиеся к пакету? Например, объекты x и y ниже представляют собой обе среды с тем же классом и атрибутами.Как отличить среду пространства имен пакетов от других объектов среды

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

Однако, судя по методу print есть разница:

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

Теперь предположим, что у меня есть произвольный объект, как я могу определить, какой из двух он (не смотря на выходе print)? Я хотел бы знать это, чтобы определить, как сохранить объект на диске. В случае с первым мне нужно сохранить представление списка среды (и, возможно, ее родителей), но для последнего я просто сохраню имя и версию пакета.

ответ

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"  
Смежные вопросы