SDM-пакет не работает в блестящем io - PullRequest
0 голосов
/ 08 мая 2020

Я построил пару моделей распространения видов, используя sdm:sdm(). Из них я делаю прогнозы, используя raster::predict() и sdm::ensemble(), на основе входных данных виджета в блестящем приложении. (Обратите внимание, что raster::predict() также автоматически загружает пакет sdm, если обнаруживает объект sdm). Приложение работает локально, но не на сервере shiny.io.

Я удалил сценарий server.R и добавил по одному элементу за раз до тех пор, пока не возникнет ошибка, и это, похоже, происходит при запуске любой из этих функций. Журнал ошибок возвращает

Предупреждение: ошибка в <-: замена имеет нулевую длину </p>

Если я перемещаю функцию прогнозирования / ансамбля за пределы части сервера renderPlot () .R он также возвращает:

Ошибка в m [i] <- .self $ whichMethod (m [i]): замена имеет нулевую длину </p>

Я проследил эта ошибка на здесь , но не нашли ничего, что указывает, почему приложение должно работать локально, а не на сервере. Я попытался удалить все упоминания о моделях maxent, поскольку для этого требуется модификация локальной библиотеки, добавив файл maxent.jar в папку dismo / java /. Это ни на что не повлияло. Я также обновил и повторно развернул все необходимые пакеты.

Блестящий скрипт, который вставлен ниже, и вы найдете дополнительные необходимые файлы здесь здесь и здесь .

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       

Может кто-нибудь помочь пролить свет на это? С уважением, Андерс Колстад

Ответы [ 2 ]

0 голосов
/ 15 мая 2020

Я думаю, вам следует заменить raster :: Forecast на sdm :: Forever, потому что sdm имеет свою собственную функцию прогнозирования. Надеюсь, это решит проблему.

С уважением, Бабак

0 голосов
/ 13 мая 2020
Библиотека

(sdm), в отличие от других пакетов, не сообщает виртуальному серверу об установке его зависимостей. Этот пакет использует для этого команду sdm :: install_all (). Эта команда не работает в блестящем, но вместо этого сделала это:

Запустить новый сеанс R (sdm unattached)

библиотека (sdm)

Затем сделайте что-то вроде предсказать (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)

Вы можете sh отбросить те, которые вам не нужны, но я не уверен, как быть уверенным, какие именно вы используете необходимость.

Теперь это работает на shinyapps.io. (Обратите внимание, что пример shiny не обновляется этим решением.)

...