【问题标题】:How to distinguish package namespace environment from other environment objects如何区分包命名空间环境与其他环境对象
【发布时间】:2013-11-12 19:09:47
【问题描述】:

有没有办法以编程方式区分包环境和非包环境对象?例如,下面的对象xy 都是环境,具有相同的类和属性。

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

但是从print的方法来看还是有区别的:

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

现在假设我有一个任意对象,我如何确定它是两者中的哪一个(不查看print 的输出)?我想知道这一点以确定如何将对象存储在磁盘上。在前者的情况下,我需要存储环境的列表表示(可能还有它的父母),但对于后者,我只需要存储包的名称和版本。

【问题讨论】:

    标签: r cran


    【解决方案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"    
    

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 1970-01-01
      • 2016-05-21
      • 2016-12-15
      • 2019-05-15
      • 1970-01-01
      • 2020-03-17
      • 2019-08-13
      • 2016-07-17
      相关资源
      最近更新 更多