闪亮的范围规则 - 在模块化架构中加载库的位置
Shiny scoping rules - where to load libraries in modular architecture
对于这个问题,我只想弄清楚在使用 Shiny 应用程序时使用包的最佳方法。尽管与询问 R-related questions 的良好做法相反,该问题不包含代码或可重现的示例,但我希望它涉及实际和相关问题。
问题
我正在开发具有以下结构的 modular 闪亮应用程序:
server.R
- 包含一些关键函数和前几个初始图形
ui.R
- 提供基本的用户界面框架
data
- 包含一些非动态来源的数据文件的文件夹
list.csv
- 包含数据的示例文件
...
- 其他数据文件
functionsAndModules
- 包含 *.R
个与函数和模块相关的文件的文件夹
functionCleanGeo.R
- 清除一些格式数据帧的简单函数:cleanDataFrame <- function(data) { ... return(cleanDta) }
moduleTimeSeries.R
- 提供时间序列分析的模块执行以下操作:
- 正在生成用户界面
- 采购数据
- 正在生成图表
...R
- 其他模块和函数保存为 *.R
文件。
图书馆
我想知道的是如何加载最适合上述应用程序结构的程序包。我特别想知道:
当 仅 加载库就足够时 global.R
以及何时(如果有的话)可能需要跨模块文件加载库and/or server.R
/ ui.r
?
1.2。例如,当使用 shinyTree
包时,我将其加载到 server.R
和 ui.R
中,据我所知,这是从示例中得出的。模块和函数使用 dplyr
/ tidyr
组合,加载这些包是否足够 global.R
?
我首选的加载包的方法如下所示:
Vectorize(require)(package = c("ggvis", "SPARQL", "jsonlite", "dplyr", "tidyr", "magrittr"), character.only = TRUE)
,它是否适用于上述架构?
这是我的两分钱:
- 要加载的包需要在
app.R
文件的开头、app.R
的服务器端或模块文件中声明。
- 在模块中,可以在
fooUI
和 fooServer
模块函数之外或内部声明库。两者都有效。
- 为了模块的可重用性,我更喜欢在每个
module*.R
文件的开头声明它们。
- 至少对我来说,加载到
global.R
文件的库,不会 获取模块,因此它们可以 运行。我的假设是它不会在 app.R 环境中加载。我知道 global.R 是从 server
和 ui
加载共享对象到 set some configuration。
对于这个问题,我只想弄清楚在使用 Shiny 应用程序时使用包的最佳方法。尽管与询问 R-related questions 的良好做法相反,该问题不包含代码或可重现的示例,但我希望它涉及实际和相关问题。
问题
我正在开发具有以下结构的 modular 闪亮应用程序:
server.R
- 包含一些关键函数和前几个初始图形ui.R
- 提供基本的用户界面框架data
- 包含一些非动态来源的数据文件的文件夹list.csv
- 包含数据的示例文件...
- 其他数据文件
functionsAndModules
- 包含*.R
个与函数和模块相关的文件的文件夹functionCleanGeo.R
- 清除一些格式数据帧的简单函数:cleanDataFrame <- function(data) { ... return(cleanDta) }
moduleTimeSeries.R
- 提供时间序列分析的模块执行以下操作:- 正在生成用户界面
- 采购数据
- 正在生成图表
...R
- 其他模块和函数保存为*.R
文件。
图书馆
我想知道的是如何加载最适合上述应用程序结构的程序包。我特别想知道:
当 仅 加载库就足够时
global.R
以及何时(如果有的话)可能需要跨模块文件加载库and/orserver.R
/ui.r
?1.2。例如,当使用
shinyTree
包时,我将其加载到server.R
和ui.R
中,据我所知,这是从示例中得出的。模块和函数使用dplyr
/tidyr
组合,加载这些包是否足够global.R
?我首选的加载包的方法如下所示:
Vectorize(require)(package = c("ggvis", "SPARQL", "jsonlite", "dplyr", "tidyr", "magrittr"), character.only = TRUE)
,它是否适用于上述架构?
这是我的两分钱:
- 要加载的包需要在
app.R
文件的开头、app.R
的服务器端或模块文件中声明。 - 在模块中,可以在
fooUI
和fooServer
模块函数之外或内部声明库。两者都有效。 - 为了模块的可重用性,我更喜欢在每个
module*.R
文件的开头声明它们。 - 至少对我来说,加载到
global.R
文件的库,不会 获取模块,因此它们可以 运行。我的假设是它不会在 app.R 环境中加载。我知道 global.R 是从server
和ui
加载共享对象到 set some configuration。