r语言 - 如果从 .简介



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)
}

相关内容

最新更新