3

パッケージ環境と非パッケージ環境オブジェクトをプログラムで区別する方法はありますか? たとえば、以下のオブジェクトxy両方とも環境であり、クラスと属性は同じです。

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

ただし、方法から判断するprintと、違いがあります。

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

ここで、任意のオブジェクトがあるとします。2 つのオブジェクトのどちらであるかを (の出力を見ずにprint) 判別するにはどうすればよいでしょうか? オブジェクトをディスクに保存する方法を決定するために、これを知りたいです。前者の場合、環境 (およびおそらくその親) のリスト表現を保存する必要がありますが、後者の場合は、パッケージの名前とバージョンを保存するだけです。

4

1 に答える 1

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"    
于 2013-11-12T19:22:28.970 に答える