在函数中包含库调用?

时间:2016-03-29 12:51:04

标签: r

在该函数中包含执行函数所需的每个库是不错的做法?

例如,我的文件global.r包含了闪亮应用所需的几个功能。目前我在文件顶部有所有需要的包。当我切换项目/复制这些功能时,我必须加载包/将它们包含在新代码中。否则所有需要的包都包含在该函数中。当然,我必须使用新的R会话检查所有功能,但我认为从长远来看这可能有所帮助。

当我尝试加载包两次时,它不会再次加载包但检查它已经加载了。我的主要问题是,如果我以这种方式进行重组,是否会减慢我的功能?

我只看过一次练习,库调用函数内部,所以我不确定。

1 个答案:

答案 0 :(得分:5)

正如其中一位评论者建议的那样,您应该避免在函数中加载包

  1. 该功能现在具有全局效果 - 作为一般规则,这是要避免的事情。
  2. 非常效果不佳。
  3. 第一点是重要的一点。与大多数优化一样,只有在问题出现时才会担心第二点。

    现在我们已经建立了原则,可能的解决方案是什么。

    1. 在小型项目中,我有一个名为packages.R的文件,其中包含我需要的所有library次调用。这来自我的分析脚本的顶部。顺便说一下,我的所有功能都在文件调用中func.R。此工作流程是从先前的SO question

    2. 中窃取/改编的
    3. 如果您只导入一个功能,则可以使用::技巧,例如package::funcA(...)这样就可以避免加载包。

    4. 对于大型项目,我创建一个R包来处理所有必要的导入。创建包的好处详见本answer关于构建大型R项目的内容。