«функция %>% не найдена» — dplyr-пакет загружен

#r #docker #shiny #r-package #shinyproxy

Вопрос:

В настоящее время я пытаюсь запустить свое r-приложение через shinyproxy в сочетании с докером — к сожалению, безуспешно.

Приложение работает без проблем при запуске через R-Studio. Однако, как только я создаю образ докера и пытаюсь вызвать его, я получаю сообщение об ошибке «функция %>% не найдена>«.

Я думаю, что пакеты загружены неправильно, но я не могу сказать, почему. В моем файле настройки я ссылаюсь на «installLibrarys.Файл R», который содержит все библиотеки, необходимые мне для приложения. Я также адаптировал файл rProfile, чтобы каждый сеанс R загружал все библиотеки.

С аналогичным приложением, которое было менее обширным (но с почти идентичным dockerfile, а также applications.yml), хостинг через shinyproxy и docker работал без каких-либо проблем….

да, Вы можете найти мой файл Docker, мой Rprofile.site, мое приложение.yml и мои installLibrarys.R в конце поста.

Может быть, у кого-то есть идея, что еще я мог бы сделать. Если вам нужна дополнительная информация, не стесняйтесь обращаться ко мне! 🙂

Спасибо вам и с наилучшими пожеланиями

P.S.: Я знаю, что многие библиотеки «содержатся» в других и загружаются без необходимости — я еще не дошел до сортировки 😀


Rprofile.сайт

     ##                      Emacs please make this -*- R -*-
## empty Rprofile.site for R on Debian
##
## Copyright (C) 2008 - 2018  Dirk Eddelbuettel and GPL'ed
##
## see help(Startup) for documentation on ~/.Rprofile and Rprofile.site

# ## Example of .Rprofile
# options(width=65, digits=5)
# options(show.signif.stars=FALSE)
# setHook(packageEvent("grDevices", "onLoad"),
#         function(...) grDevices::ps.options(horizontal=FALSE))
# set.seed(1234)
# .First <- function() cat("n   Welcome to R!nn")
# .Last <- function()  cat("n   Goodbye!nn")

# ## Example of Rprofile.site
# local({
#  # add MASS to the default packages, set a CRAN mirror
#  old <- getOption("defaultPackages"); r <- getOption("repos")
#  r["CRAN"] <- "http://my.local.cran"
#  options(defaultPackages = c(old, "MASS"), repos = r)
#})

## We set the cloud mirror, which is 'network-close' to everybody, as default
local({
    r <- getOption("repos")
    r["CRAN"] <- "https://cloud.r-project.org"
    options(repos = r)
})

  library("shiny")
  library("rwhatsapp") 
  library("dplyr")     
  library("stringr")    
  library("grid")       
  library("gridExtra")  
  library("cowplot")    
  library("magick")     
  library("ggmap")      
  library("stopwords")  
  library("tidytext")   
  library("stringi")    
  library("ggplot2")
  library("tidyr")
  library("lubridate")
  library("ggtext")
  library("lattice")
  library("extrafont")
  library("showtext")
  library("ggfittext")
  library("sysfonts")
  library("png")
  library("shinyBS")
  library("shinyWidgets")
  library("bslib")
  library("shinycustomloader")
  library("magrittr")
  library("knitr")
 

Установочные пакеты.R

 r = getOption("repos")
r["CRAN"] = "http://cran.us.r-project.org"
options(repos = r)


  install.packages("shiny")
  install.packages("rwhatsapp") 
  install.packages("dplyr")     
  install.packages("stringr")    
  install.packages("grid")       
  install.packages("gridExtra") 
  install.packages("cowplot")    
  install.packages("magick")     
  install.packages("ggmap")      
  install.packages("stopwords")  
  install.packages("tidytext")   
  install.packages("stringi")    
  install.packages("ggplot2")
  install.packages("tidyr")
  install.packages("lubridate")
  install.packages("ggtext")
  install.packages("lattice")
  install.packages("extrafont")
  install.packages("showtext")
  install.packages("ggfittext")
  install.packages("sysfonts")  
  install.packages("png")
  install.packages("googleway")
  install.packages("shinyBS")
  install.packages("shinyWidgets")
  install.packages("bslib")
  install.packages("shinycustomloader")

  library(shiny)
  library(rwhatsapp)  
  library(dplyr)      
  library(stringr)    
  library(grid)       
  library(gridExtra)  
  library(cowplot)    
  library(magick)     
  library(ggmap)      
  library(stopwords)  
  library(tidytext)  
  library(stringi)    
  library(ggplot2)    
  library(tidyr)     
  library(lubridate)  
  library(ggtext)     
  library(lattice)    
  library(extrafont)    
  library(showtext)
  library(ggfittext)
  library(sysfonts)
  library(png)
  library(googleway)
  library(shinyBS)
  library(shinyWidgets)
  library(bslib)
  library(shinycustomloader)
 

Dockerfile

 FROM rocker/r-base:latest
LABEL maintainer="USER <user@example.com>"
RUN apt-get update amp;amp; apt-get install -y --no-install-recommends 
    sudo 
    libcurl4-gnutls-dev 
    libgtk2.0-dev
    xvfb
    xauth
    xfonts-base
    libcairo2-dev 
    libxt-dev 
    libssl-dev 
    libssh2-1-dev 
    libxml2-dev 
    libmagick  -dev
        amp;amp; rm -rf /var/lib/apt/lists/*
RUN install.r shiny
RUN echo "local(options(shiny.port = 3838, shiny.host = '0.0.0.0'))" > /usr/lib/R/etc/Rprofile.site
RUN addgroup --system app 
    amp;amp; adduser --system --ingroup app app
WORKDIR /home/app
COPY app .
RUN Rscript installPackages.R

RUN chown app:app -R /home/app
USER app
EXPOSE 3838
CMD ["R", "-e", "shiny::runApp('/home/app')"]
 

приложение.yml

 proxy:
  title: ShinyProxy
#  logo-url: https://link/to/your/logo.png
  landing-page: /
  favicon-path: favicon.ico
  heartbeat-rate: 10000
  heartbeat-timeout: 600000
  port: 8080
  container-wait-time: 60000
  admin-groups: admins
  hide-navbar: true
  # Docker configuration
  docker:
    cert-path: /home/none
    url: http://localhost:2375
    port-range-start: 20000
  specs:
  - id: 01_hello
    display-name: Hello Shiny App
    description: A simple reactive histogram
    container-image: #######:latest
    logo-url: ########
    access-groups: [admins, users]
  

logging:
  file:
    shinyproxy.log

spring:
  servlet:
    multipart:
      max-file-size: 2000MB
      max-request-size: 2000MB
 

Комментарии:

1. Как выглядит код для вашего блестящего приложения? Есть ли у вашего блестящего кода library(dpyr) ? Или вы пытаетесь избежать этого с Rprofile.site помощью файла? Я не совсем понимаю, где вы на самом деле это используете. Потому что в вашем файле dockerfile у вас есть RUN echo "local(options(shiny.port = 3838, shiny.host = '0.0.0.0'))" > /usr/lib/R/etc/Rprofile.site то, что вообще не связано с этим другим файлом. Вы имели в виду включить этот файл куда-нибудь в файл dockerfile?

2. @MrFlick я только что погуглил свою проблему, и кто-то дал совет добавить библиотеки в Rprofile. итак, я попробовал :Я думаю, что библиотеки дополнительно загружаются в приложение — может ли это быть причиной?

3. Но на самом деле вы нигде не использовали этот файл. Так что на самом деле ты этого не делал. Ваш файл dockerfile не использует этот файл, он создает его с помощью оператора echo. Вы могли бы это исправить, но, как правило, лучше явно указывать зависимости вашей библиотеки в самом коде приложения. Но вы не предоставили ни одного из этих кодов, поэтому неясно, что там происходит.

4. @MrFlick мое приложение состоит из относительно большого количества файлов, каждый из которых ссылается на себя — было бы сложно загрузить все данные. Но вы бы рекомендовали загружать библиотеки непосредственно в код вместо использования installLibrarys? Файл R?

5.Установка пакетов-это одно, не стесняйтесь сохранять это. Однако среда, в которой выполняется этот сценарий, отбрасывается к моменту завершения создания образа, поэтому любые library(XX) вызовы в этом сценарии являются недолговечными. Если вашему приложению нужен пакет, используйте его library(XX) в самом приложении; часто я вижу global.R файл, в котором есть все library(XX) вызовы, и другие файлы source(.) , которые необходимы.

Ответ №1:

Я нашел решение.

Я загрузил все библиотеки один раз в начале ui.r файла — не через функцию, а напрямую. Это не делает код приятнее, но он работает 😀