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

Kon*_*rad 6 module r package shiny

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

问题

我正在开发一个具有以下结构的模块化 Shiny应用程序:

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

图书馆

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

  1. 在in global.R和when(如果有的话)加载库就足够了,可能需要在模块文件和/或server.R/ ui.r?之间加载库.

    1.2.对于使用时例如shinyTree包我在加载server.Rui.R为,这是我的理解,这从实施例流动.模块和功能使用dplyr/ tidyr组合,是否足以加载这些包global.R

  2. 我首选的加载包的方法看起来如下: Vectorize(require)(package = c("ggvis", "SPARQL", "jsonlite", "dplyr", "tidyr", "magrittr"), character.only = TRUE)它可以与上述架构一起使用吗?

小智 3

这是我的两分钱:

  • 要加载的包需要在文件的开头app.R、服务器端声明app.R或模块文件中声明。
  • 在模块中,库可以在fooUI和之外声明fooServer模块函数外部或内部声明。两者都有效。
  • 为了模块的可重用性,我更喜欢在每个模块的开头声明它们module*.R文件的开头声明它们。
  • 至少对我来说,加载到global.R文件上的库不会访问模块,因此它们可以运行。我的假设是它不会加载到 app.R 环境中。我理解 global.R 是从server和加载共享对象ui设置一些配置