微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R Shiny Dashboard - 使用 source('file.R') 加载脚本

如何解决R Shiny Dashboard - 使用 source('file.R') 加载脚本

简介

我创建了一个 R 闪亮的仪表板应用程序,它很快变得非常复杂。我有超过 1300 行代码都位于 app.R 中,并且可以正常工作。我正在使用 RStudio

我的应用程序有一个侧边栏和选项卡,我没有使用模块,而是在绘制图形等时动态抓取侧边栏和选项卡 ID 以生成唯一标识符。

我正在尝试重新组织它以使其更易于管理并将其拆分为其他程序员的任务,但我遇到了错误

工作代码

我的原始代码有许多库语句,并将工作目录设置为代码位置。

rm(list = ls())
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
getwd()

然后我有一系列位于 ui/server 函数之外的函数,因此只加载一次(不是反应性的)。这些都是通过设置反应值并从诸如 renderPlot 之类的内部调用函数来从服务器内部调用的。其中一些是嵌套的,因此服务器中的函数调用常规 app.R 中的函数,后者又调用一个函数。例如。

# Start of month calculation
som <- function(x) {
  toReturn <- as.Date(format(x,"%Y-%m-01"))
  return(toReturn)
}

start_fc <- function(){
  fc_start_date <- som(today())
  return(fc_start_date)
}

然后在服务器中是这样的(代码不完整)

server <- function(input,output,session) {
  RV <- reactiveValues()
  observe({
    RV$selection <- input[[input$sidebar]]
  #  cat("Selected:",RV$selection,"\r")
  })
  
.......
    cat(paste0("modelType: ",input[[paste0(RV$selection,"-modeltype")]]," \n"))
    vline1 <- decimal_date(start_pred(input[[paste0(RV$selection,"-modelrange")]][1]))
    vline2 <- decimal_date(start_fc())
.......

问题代码

现在,当我将所有函数放入不同的 .R 文件中时,我收到错误消息,表明函数尚未加载。如果我通过突出显示文件并按 Alt-Enter 运行它们来加载源文件,以便将它们加载到内存中,然后单击“运行应用程序”,代码将起作用。但是如果我靠Run App来加载那些源文件,以及里面的函数,就找不到这些函数了。

source('./functionsGeneral.R')
source('./functionsQuote.R')
source('./functionsNewBusiness.R')

source('./ui.R')
source('./server.R')

shinyApp(ui,server)

ui.R 在哪里

source('./header.R')
source('./sidebar.R')
source('./body.R')

source('./functionsUI.R')

ui <- dashboardPage( 
  header,sidebar,body
)

最后是问题

R Shiny Dashboard 以什么顺序运行代码。当我将完全相同的内联代码放入另一个文件并使用 source('./functions.R') 引用它时,为什么会失败?在闪亮的应用程序会话期间它不会加载到内存中吗?我错过了什么?

对此的任何帮助将不胜感激。

谢谢, 特拉维斯

解决方法

好的,我发现最简单的方法是创建一个名为 R 的子文件夹并将预加载代码放入该文件夹中。从闪亮的 1.5 版开始,R 文件夹中的所有这些代码都会首先自动加载。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。