【问题标题】:How to define which variables or functions from a package are exported如何定义导出包中的哪些变量或函数
【发布时间】:2012-11-06 08:07:02
【问题描述】:

我的 R 包使用内部变量 x。如果我加载包(我只尝试过使用devtools::load_all),那么x 不会出现在ls() 列表中,但它确实有一个值。我怎样才能避免这种情况?

我很满意用户能够使用myPackage::x 访问变量,但不仅仅是x

【问题讨论】:

    标签: r namespaces export package devtools


    【解决方案1】:

    尝试先构建包,检查问题是否仍然存在。包中的导出在NAMESPACE 文件中定义。当您使用devtools::load_all 时,不会加载命名空间(请参阅here)。在手册Writing R extensions 中阅读有关此内容并构建包的更多信息。

    您可能在 NAMESPACE 文件中使用了默认导出模式。检查它在你的包中,如果它看起来像这样:

    exportPattern("^[^\\.]")
    

    然后包从命名空间中导出不以点开头的所有内容。所以你要么叫它.x,要么把exportPattern()改成eg...

    export(myfun1, myfun2) 
    

    从包中导出函数myfun1myfun2。通过明确定义要导出的内容,您可以避免在不需要时出现可用的内容。

    【讨论】:

    • 我的命名空间文件只是export(f,g)
    • 尝试先构建包,并确保在命名空间中正确指定导出。另请参阅我的编辑。
    • 我明白了。每次我进行编辑时,有什么方法可以避免构建和安装包?我用source("test.R") 对其进行了测试,在此之前进行构建安装有点笨拙。
    • 您不必为每个测试都构建包,但是如果您想检查是否所有内容都按您的意愿导出,则必须安装它。否则不会读取命名空间文件。但这是我最后完全做的事情,当我确定所有其他工作都按预期工作时。
    • Andreas 您一直在询问有关构建软件包的问题,​​并提出了一些使用 Rstudio 的建议。我保证使用它会大大简化你的生活。有很多包开发工具可以满足您的要求。我也可以建议去 git hub 并在那里找到你信任的人的包(例如我信任 Hadley Wickham 的包)并看看他们是如何做事的。
    【解决方案2】:

    load_all 函数有一个 export_all 参数。

    来自?load_all

    如果为 TRUE(默认值),则导出所有对象。如果为 FALSE,则仅导出在 NAMESPACE 文件中列为导出的对象。

    所以,请尝试在您的 load_all 通话中使用 export_all=FALSE

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      相关资源
      最近更新 更多