部署 R Shiny 应用程序时加载包时出现问题

Posted

技术标签:

【中文标题】部署 R Shiny 应用程序时加载包时出现问题【英文标题】:Problem loading packages while deploying an R Shiny app 【发布时间】:2021-12-25 16:18:57 【问题描述】:

我试图部署一个 R Shiny 应用程序,当我在本地运行它时它可以完美运行。但是当我部署应用程序时,它会在一些输出中显示错误消息:“Error: An error has occurred. Check your logs or contact the app author for clarification.”。

看了几个帖子,我觉得跟包的加载有关。

我正在使用以下软件包:

library(shiny)
library(magrittr)
library(shinyjs)
library(DT)
library(ggthemes)
library(shinythemes)
library(r2symbols)
library(caret)
# install.packages("PresenceAbsence")
library(glmnet)
library(tidyverse)
# install.packages("devtools")

我在从全新会话部署应用程序时收到以下警告。我不是特别清楚出了什么问题(因为该应用程序在我的 R 会话上运行)。您能否向我建议一些我应该尝试让应用程序在服务器上运行的事情?

  Loading required package: shiny
Warning: package ‘shiny’ was built under R version 3.6.3
Warning: package ‘shinyjs’ was built under R version 3.6.3
You can use shinyjs to call your own javascript functions:
    https://deanattali.com/shinyjs/extend

Attaching package: ‘shinyjs’

The following object is masked from ‘package:shiny’:

    runExample

The following objects are masked from ‘package:methods’:

    removeClass, show

Warning: package ‘DT’ was built under R version 3.6.3

Attaching package: ‘DT’

The following objects are masked from ‘package:shiny’:

    dataTableOutput, renderDataTable

Warning: replacing previous import ‘vctrs::data_frame’ by ‘tibble::data_frame’ when loading ‘dplyr’
Warning: package ‘ggthemes’ was built under R version 3.6.3
Warning: package ‘shinythemes’ was built under R version 3.6.3
Warning: package ‘r2symbols’ was built under R version 3.6.3

Attaching package: ‘r2symbols’

The following object is masked from ‘package:ggplot2’:

    sym

Warning: package ‘caret’ was built under R version 3.6.3
Loading required package: lattice
Warning: package ‘lattice’ was built under R version 3.6.3

Attaching package: ‘PresenceAbsence’

The following objects are masked from ‘package:caret’:

    sensitivity, specificity

Warning: package ‘glmnet’ was built under R version 3.6.3
Loading required package: Matrix
Loaded glmnet 4.0-2
Warning: package ‘tidyverse’ was built under R version 3.6.3
-- Attaching packages -------------------------------------------------------------------------- tidyverse 1.3.0 --
v tibble  3.0.4     v dplyr   1.0.0
v tidyr   1.0.2     v stringr 1.4.0
v readr   1.3.1     v forcats 0.4.0
v purrr   0.3.3     
Warning: package ‘tibble’ was built under R version 3.6.3
Warning: package ‘dplyr’ was built under R version 3.6.3
-- Conflicts ----------------------------------------------------------------------------- tidyverse_conflicts() --
x tidyr::expand()    masks Matrix::expand()
x tidyr::extract()   masks magrittr::extract()
x dplyr::filter()    masks stats::filter()
x dplyr::lag()       masks stats::lag()
x purrr::lift()      masks caret::lift()
x tidyr::pack()      masks Matrix::pack()
x purrr::set_names() masks magrittr::set_names()
x dplyr::sym()       masks r2symbols::sym(), ggplot2::sym()
x tidyr::unpack()    masks Matrix::unpack()

Listening on http://127.0.0.1:6757

更多详情:

我还在服务器部分提到了我的输出,它在部署到 Shiny 服务器时不会显示,但在从本地 PC 运行时可以工作。 pred_prob_func() 使用来自 caret 包的随机森林,并使用随机森林模型 (ranger) 获得预测概率。我什至不确定包加载是一个问题,但我想是的。但是,我不知道为什么它可以在我的 PC 上运行,而不是在 Shiny 服务器上运行。版本问题?

输出:

  # Heatmap predicted probabilities
  output$Heatmap_predicted_probabilities <- renderPlot(
   
    plot(x=seq(0,1,0.01), y=rep(0,101), main="Heatmap of predicted probabilities", xlab="The square cross symbol represents the predicted probability based on input values on the dashboard", ylab="", xlim=c(0,1), ylim=c(-0.1,0.1), yaxt="n", bty="n", pch=15, cex=20, col=hsv(0.05, seq(0,1,length.out = 101), 0.80))
    points(x=pred_prob_func(input_list())$pred_prob, y=0, lwd=2, pch=7, cex=4)
    
  )

【问题讨论】:

你似乎有很多冲突。请确保您在函数前面附加了包名称。例如,您可以使用dplyr::filter(...),而不仅仅是filter(...) @YBS 谢谢!我检查并发现在部署到 Shiny 服务器时输出的部分不起作用。我已经在上面的“更多详细信息”下添加了它们。 我尝试安装最新版本的 R,但现在我收到一条错误消息“错误:未处理的异常:子任务 1049338094 失败:构建映像时出错:R 版本 4.1.2 当前不可用执行暂停” 在您的情况下,您应该为以下函数指定调用的包:symsensitivityspecificity。例如,调用package::sensitivity,其中package 是您的程序中实际感兴趣的包。另外,请使用DTOutputrenderDT,而不是dataTableOutputrenderDataTable 嗨,我刚刚检查了 Shiny 应用程序还不支持最新的 R 版本。所以,我又重新使用了另一个旧版本的 R。 【参考方案1】:

我找到了解决方案,我想我会把它发布在这里,以供将来可能面临同样问题的其他人使用。显然,这不是版本的问题。当我只调用“caret”包运行应用程序时,它在我的本地 PC 上运行良好。但是上传到 Shiny 服务器时它不起作用。我意识到仅调用“caret”包是不够的,但我还需要调用“ranger”库,因为我正在使用“caret”和“ranger”进行随机森林。虽然它无需在我的本地 PC 上单独调用 'ranger' 即可工作,但当我添加这两行时,该应用程序只能在服务器上顺利运行:

library(ranger)
library(caret)

【讨论】:

以上是关于部署 R Shiny 应用程序时加载包时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

R Shiny 在后台加载隐藏的侧边栏(使用 bs4Dash 包)

R Shiny:无法检索 vertica DB 的 JDBC 结果集

使用 Shiny 应用程序保存数据时出现问题

构建Shiny应用

在 R 中加载 Lime 包时出现错误“对象‘coef.cv.glmnet’不是由‘namespace:glmnet’导出”-

使用 R 和 XLConnect 包时出现“内存不足错误 (Java)”