闪亮的范围规则 - 在模块化架构中加载库的位置

时间:2016-03-10 11:45:12

标签: r module shiny package

有了这个问题,我只对在使用Shiny应用程序时使用软件包的最佳方法有所了解。尽管与提问R-related questions的良好做法相反,这个问题并不包含代码或可重复的例子,但我希望它涉及实际和相关的问题。

问题

我正在研究具有以下结构的modular Shiny应用程序:

  • server.R - 包含一些关键功能和前几个初始图形
  • ui.R - 提供基本的用户界面框架
  • data - 包含一些未动态采购的数据文件的文件夹
    • list.csv - 包含数据的示例文件
    • ... - 其他数据文件
  • functionsAndModules - 包含与功能和模块相关的*.R个文件的文件夹
    • functionCleanGeo.R - 简单功能清理格式的一些数据框:cleanDataFrame <- function(data) { ... return(cleanDta) }
    • moduleTimeSeries.R - 提供时间序列分析的模块,执行以下操作:
      • 生成用户界面
      • 采购数据
      • 生成图表
    • ...R - 其他模块和函数保存为*.R个文件。

我想知道的是如何处理对于上面概述的app结构最佳的加载包。特别是,我想知道:

  1. 如果在global.R中加载库 就足够了,何时(如果有的话)可能需要在模块文件和/或{{1}之间加载库} / server.R

    1.2。例如,当使用shinyTree包时,我将其加载到ui.rserver.R中,因为我理解这是来自示例。模块和函数使用ui.R / dplyr组合,是否足以在tidyr 中加载这些包?

  2. 我加载包的首选方法如下: global.R,它可以与上述架构一起使用吗?

1 个答案:

答案 0 :(得分:2)

这是我的两分钱:

  • 要加载的包需要在app.R文件的开头,app.R的服务器端或模块文件中声明。
  • 在模块中,可以在fooUIfooServer模块函数之外或内部声明库。两者都有效。
  • 为了重新使用模块,我更喜欢在每个module*.R文件的开头声明它们。
  • 至少对我来说,加载在global.R文件上的库到达模块,因此它们可以运行。我的假设是它不会加载到app.R环境中。我知道global.R是从serverui加载到set some configuration的共享对象。