i构建了一个闪亮的应用程序,该应用程序使用列表变量(用于标签自定义(,该应用程序是从Excel文件创建的。该变量的名称是refvar
refvar
在server.r中创建到 shinyServer()
中,用于构建发送给UI.R的UI元素。refvar
也由load.data()
使用。 load.data()
定义为global.r,用于shinyServer()
。
奇怪的是,如果我手动运行该应用程序(从rstudio console中的rstudio或runapp((中的"运行应用程序"按钮(可以正常工作,而如果我将shiny::runApp()
放在.rprofile文件中,则很快启动该应用程序我打开我的rstudio项目,在浏览器中获得错误"错误:对象'refvars'找不到的'。
这是(据称(相关代码
.rprofile
shiny::runApp()
server.r
shinyServer(function(input, output) {
refvars <- read_excel('Labels.xlsx') %>% dplyr::select(1:2) %>% set_colnames(c('Var', 'Label')) %>% mutate_all(str_squish) %>% spread(Var, Label) %>% as.list
Data <- load.data()
output$UI.report.sel.text <- renderUI({helpText(refvars$report.sel.text)})
output$UI.daterange.sel.text <- renderUI({helpText(refvars$daterange.sel.text)})
#[...]
})
global.r
load.data <- function() {
tryCatch(read_excel("Report_data.xlsx"), error = function(e) file.choose()) %>%
rename(!!c(
Anno = refvars$year,
Mese = refvars$month,
Indagine = refvars$report,
Reparto = refvars$context,
Note = refvars$notes,
Problemi = refvars$problems,
Sforamenti = refvars$non.compliance,
Protocollo = refvars$id
)) %>%
mutate(
Data = ymd(paste(Anno, Mese, '1', sep = '-'))
)
}
更新:
我进行了一些实验,将refvar
放在Global.R中。现在,该应用程序从.rprofile开始良好,但是有些事情被打破了。例如,如果应该有一个ggplot,我会得到"错误:对象'未找到",但实际上我没有使用任何title
对象。
我试图通过capture.Output(str(data((检查我传递给GGPLOT的数据的状态,并通过UIOutput指令将其输出到UI.R。错误是因为它可以找到函数str()
和capture.output()
;UTIL软件包未加载!
所以我想问题是.rprofile的RunApp((运行得为时太早。我该如何解决?
问题完全是在运行.rprofile时仍未加载默认软件包。
因此,我不得不重新定义.first.sys函数,并在此处添加我的runapp代码:
.rprofile
pkg.require <- function(pkgs, load = T){
installed <- utils::installed.packages()
not.installed <- c()
for (pkg in pkgs) {
if (!(pkg %in% installed)) not.installed <- c(not.installed, pkg)
}
if (length(not.installed) > 0) utils::install.packages(not.installed)
if (load) for (pkg in pkgs) library(pkg, character.only = TRUE)
}
.First.sys <- function ()
{
for (pkg in getOption("defaultPackages")) {
res <- require(pkg, quietly = TRUE, warn.conflicts = FALSE,
character.only = TRUE)
if (!res)
warning(gettextf("package %s in options("defaultPackages") was not found",
sQuote(pkg)), call. = FALSE, domain = NA)
}
pkg.require(c('shiny'))
shiny::runApp(launch.browser = T)
}