繁体   English   中英

sdm package 在 shiny io 中失败

[英]sdm package fails in shiny io

我已经使用sdm:sdm()构建了几个物种分布模型,根据 shiny 应用程序中的小部件输入数据,我使用raster::predict()sdm::ensemble()进行预测。 (请注意, raster::predict()如果检测到 sdm 对象,也会自动加载 sdm package)。 该应用程序在本地运行,但不在服务器 shiny.io 上运行。

我已经剥离了他的 server.R 脚本并在错误发生之前添加了一个元素,这似乎是在运行这些函数中的任何一个时。 错误日志返回

警告:<- 中的错误:替换的长度为零

如果我将预测/集合 function 移到 server.R 的 renderPlot() 部分之外,它还会返回:

m[i] <-.self$whichMethod(m[i]) 中的错误:替换的长度为零

我已将此错误追溯到此处,但没有找到任何表明该应用程序应在本地而不是在服务器上运行的原因。 我尝试删除所有提及的 maxent 模型,因为这需要通过将 maxent.jar 文件添加到 dismo/java/ 文件夹来修改本地库。 这并没有影响任何事情。 我还更新了所有基本软件包并重新部署。

shiny 脚本粘贴如下,您可以此处此处找到其他所需文件。

library(shiny)
library(sdm)
library(raster)

ui <- shinyUI(fluidPage(
  titlePanel("This is my app"),

  sidebarLayout(
    sidebarPanel(
      helpText("Example sidebar")
    ),

    mainPanel("Plots", 
                 plotOutput("map")
                 )
    )
  ))

# import raster stack- IVapp.grd and IVapp.gri should be in the same folder ass app.R
IV      <- raster::stack("IVapp.grd")

# import sdm model object
m       <- read.sdm("Kobresia_new.sdm")

server <- function(input, output) {
    output$map <- renderPlot({
      withProgress(message = 
                     "Working on it ... please wait" , value = 0, {

      # make predictions from sdm 
      pred    <- raster::predict(m, IV, 
                         mean=TRUE,
                         filename = "predicted.img",
                         overwrite=TRUE)
                     })
      plot(pred)
      }) #renderPlot
    } 
shinyApp(ui = ui, server = server)

这个应用程序可以在本地运行,但不能在shinyapps.io上运行。

> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.6 LTS

Matrix products: default
BLAS:   /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0

locale:
 [1] LC_CTYPE=en_US.UTF-8          LC_NUMERIC=C                  LC_TIME=nb_NO.UTF-8          
 [4] LC_COLLATE=en_US.UTF-8        LC_MONETARY=nb_NO.UTF-8       LC_MESSAGES=en_US.UTF-8      
 [7] LC_PAPER=nb_NO.UTF-8          LC_NAME=nb_NO.UTF-8           LC_ADDRESS=nb_NO.UTF-8       
[10] LC_TELEPHONE=nb_NO.UTF-8      LC_MEASUREMENT=nb_NO.UTF-8    LC_IDENTIFICATION=nb_NO.UTF-8

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] sdm_1.0-89          ggplot2_3.2.1       kernlab_0.9-29      rpart_4.1-15        randomForest_4.6-14
 [6] RSNNS_0.4-12        Rcpp_1.0.4.6        rJava_0.9-12        earth_5.1.2         plotmo_3.5.6       
[11] TeachingDemos_2.10  plotrix_3.7-7       Formula_1.2-3       glmnet_3.0-2        Matrix_1.2-17      
[16] mgcv_1.8-28         nlme_3.1-141        mda_0.4-10          class_7.3-15        tree_1.0-40        
[21] gbm_2.1.5           dismo_1.1-4         rgdal_1.4-8         gridExtra_2.3       rasterVis_0.47     
[26] latticeExtra_0.6-29 lattice_0.20-38     raster_3.1-5        sp_1.4-1            shiny_1.4.0.2      
[31] dplyr_0.8.3       

有人可以帮助阐明这一点吗? 亲切的问候,安德斯·科尔斯塔德

library(sdm) 与其他软件包一样,不会告诉 mercurial server 安装它的依赖项。 这个 package 为此依赖命令 sdm::install_all()。 此命令在 shiny 中不起作用,但改为:

启动一个新的R session(sdm未附加)

图书馆(sdm)

然后做一些类似 predict(myModel, ...)

这会导致 R 加载所有依赖项,然后将其打印在控制台中。 我将这些添加到 server.R 文件的顶部:

library(shiny)
library(sdm)
library(sp)
library(raster)
library(dismo)
library(gbm)
#library(tree)
library(mda)
library(class)
library(mgcv)
library(nlme)
library(glmnet)
library(Matrix)
library(earth)
library(Formula)
library(plotrix)
library(TeachingDemos)
library(rJava)
library(RSNNS)
library(Rcpp)
library(randomForest)
library(rpart)
library(kernlab)
library(rasterVis)
library(gridExtra)
library(rgdal)
library(shinyjs)
library(lattice)
library(latticeExtra)

您可以删除不需要的那些,但我不确定如何确定您确实需要哪些。

这现在适用于 shinyapps.io。 (请注意,示例 shiny 未使用此解决方案进行更新。)

我认为你应该用 sdm::predict 替换 raster::predict,因为 sdm 有自己的预测 function。 我希望这可以解决问题。

最好的问候, 巴巴克

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM