很长一段时间以来,一直在 Shiny 服务器站点上的 Shiny 应用程序中使用 rstanarm 包,并使用了我编写的许多应用程序。最近,Shiny 在尝试上传使用 rstanarm 的新应用程序时出错。如果我不使用 rstanarm 就没有问题。带有 rstanarm 的 Shiny 应用程序在本地运行良好,只是无法构建到 Shiny。下面是代码和部署日志的结尾:
BEGINNING OF CODE
library(shiny)
library(shinyWidgets)
library(rstanarm)
library(readxl)
library(tidyverse)
ui <- fluidPage(
titlePanel("Check AV22"),
sidebarLayout(
sidebarPanel(
fileInput('path', 'Choose file to upload',
accept = c(
'application/vnd.ms-excel',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/vnd.ms-excel.sheet.macroEnabled.12'
)
),
),
mainPanel(
plotOutput("Plot")
)
)
)
server <- function(input, output) {
df <- eventReactive(input$path,{
inFile <- input$path
if(is.null(inFile))
return(NULL)
read_excel("./grbg.xlsx",sheet=2,skip=3)
})
prior <- reactive({
prior <- read.csv("./coefficients.csv")[20,]
})
stan_data <- reactive({
list(N=nrow(df()),x=df()$conc,y=df()$ds,mnint=prior()$mean_intercept,
sdint=prior()$sd_intercept,mnslope=prior()$mean_slope,
sdslope=prior()$sd_slope)
})
post <- reactive({
as.matrix(stan_glm(ds~conc,
data=df(),
family="binomial",
prior_intercept=normal(prior()$mean_intercept,
prior()$sd_intercept,
autoscale=TRUE),
prior=normal(prior()$mean_slope,
prior()$sd_slope,
autoscale=TRUE)))
})
q <- reactive({
pred <- matrix(rep(NA,4000*1000),nrow=4000)
x <- seq(0,max(df()$conc),length=1000)
for(i in 1:1000) {
pred[,i] <- 1 / (1 + exp(-(post()[,1] + post()[,2]*x[i])))
}
pred_quantiles <- t(apply(pred,2,function(x) quantile(x,c(.1,.5,.8))))
pred_quantiles <- data.frame(x,pred_quantiles)
names(pred_quantiles) <- c("x","q1","q5","q8")
pd90 <- (log(0.9/0.1) - post()[,1])/post()[,2]
pd90_quantiles <- quantile(pd90,c(0.1,0.5,0.8))
list(pred_quantiles=pred_quantiles,pd90_quantiles=pd90_quantiles)
})
output$Plot <- renderPlot({
ggplot() + geom_point(data=df(),aes(x=conc,y=ds),shape=4,col="black",size=2) +
geom_line(data=q()$pred_quantiles,aes(x=x,y=q1),col="slategray3",size=1) +
geom_line(data=q()$pred_quantiles,aes(x=x,y=q5),col="mediumblue",size=1) +
geom_line(data=q()$pred_quantiles,aes(x=x,y=q8),col="violet",size=1) +
geom_vline(xintercept=q()$pd90_quantiles[2],linetype="dashed") +
theme_classic()
})
}
shinyApp(ui = ui, server = server)
ENDING OF CODE
FINAL PART OF DEPLOYMENT LOG SHOWING ERROR
Eigen::Product<Eigen::CwiseBinaryOp<Eigen::internal::scalar_product_op<double, double>, const
Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, const
Eigen::Matrix<double, 1, -1> >, const Eigen::Transpose<Eigen::Matrix<double, -1, 1> > >,
Eigen::Matrix<double, -1, -1>, 0>; Rhs = Eigen::Matrix<double, -1, 1>]’
/opt/R/4.0.4/lib/R/library/RcppEigen/include
################################# End Task Log #################################
Error: Unhandled Exception: Child Task 905587151 failed: Error building image:
Error building rstanarm (2.21.1). Build exited with non-zero status: 1
Execution halted
当工作中的 IT 团队使用最新的 Microsoft 补丁更新我的 Windows 10 计算机时,问题就开始了。这可能是一个巧合,我所知道的是,直到此时我能够将使用 rstanarm 的应用程序部署到 Shiny 服务器。我还在一台非工作计算机上使用最新下载的 R、RStudiortools
和所有相关软件包进行了尝试,但我得到了同样的错误。但这并不排除它是 Windows 的东西,因为非工作计算机也有所有最新的 Windows 更新。
版本:Windows 10、R 4.0.5、RStudio 1.4.1106、rstanarm 2.21.1、rstan 2.21.2、shiny 1.6.0、shinyWidgets 0.6.0、rtools 4.0、Rcpp 1.0.6、RcppEigen 0.3.3.9.1、 rsconnect 0.8.17。
到目前为止我已经尝试过:
- 在截至 2021 年 4 月上旬从未安装过 R/RStudio 的 Windows 10 计算机上安装所有最新版本。
- 在部署到 Shiny 时回滚到早期的 R 版本在
rstanarm
4.0.3(我认为)和 3.6.3 等版本中运行良好。 - 安装
rstanarm
并rstan
从源代码而不是编译版本。 - 编写一个新的、非常简单的应用程序,带和不带.
rstanarm
时都会出现相同的错误rstanarm
。
刚刚开始的另一件奇怪的事情 -rstan
当我从 Shiny 应用程序中调用 r 会话时,它甚至在本地运行时崩溃。Rstan 在 RStudio 脚本中运行时不会使 R 崩溃,但在 Shiny 应用程序中运行时确实会崩溃。与 rstanarm 不同,带有 Rstan 的应用程序将构建到 Shiny 服务器,但随后 Shiny 服务器上的 rstan 应用程序在运行时出错,可能是因为它使 R 崩溃。
如果我在错误的地方发布了这个,请原谅我,并将我重定向到正确的地方发布这样的问题。
谢谢你。