Packages missing in shiny-server

ε祈祈猫儿з 提交于 2019-12-29 07:11:47

问题


I am trying to create a web application using shiny. It requires me to load a package I have installed on my computer. For example:

## Contents ui.R:
library(shiny)
library(plyr)

shinyUI(pageWithSidebar(

  headerPanel("Hello Shiny!"),

  sidebarPanel(
    sliderInput("obs", 
                "Number of observations:", 
                min = 0, 
                max = 1000, 
                value = 500)
  ),

  mainPanel(
    plotOutput("distPlot")
  )
))

## Contents server.R:
library(shiny)
library(plyr)

shinyServer(function(input, output) {

  output$distPlot <- renderPlot({

    # generate an rnorm distribution and plot it
    dist <- rnorm(input$obs)
    hist(dist)
  })
})

This works fine if I run it locally (using runApp) but when I try to run it via my server (same computer) I get the error that the plyr package (or any other package I try to use this way) is not installed. How could I use extra packages in shiny server?


回答1:


Compare the output of .libPaths() in both cases and adjust accordingly in the server instance / your script.

You may for example have the packages in "your" R package directory which the server cannot access. System-wide package installations are preferable in cases like this -- and are e.g. the default on Debian / Ubuntu.




回答2:


The problem is that shiny-server cannot find the packages that you install because it runs them as a different user which is called shiny. This user is created upon installation of shiny-server

The easiest (and safest IMHO) way to solve this is to just install the packages as the shiny user, using the following steps.

  1. Set a password for the user using sudo passwd shiny, now enter and confirm a password
  2. Switch to the shiny account using: su - shiny
  3. Call up R using $ R (without sudo)
  4. Install the required packages, in this case: install.packages("plyr")

Note that if you have rstudio-server installed on the same machine then you can perform steps 2-4 using that interface. Simply go the same domain/ip and use :8787 for the rstudio-server interface instead of :3838 for shiny-server.

Adapted from my answer here.




回答3:


Here might be a solution that doesn't mess up with the system library. Put the following code at the beginning of the server.R.

user <- unname(Sys.info()["user"])
if (user == "shiny") {

  # Set library locations
  .libPaths(c(
    "/path/to/your/own/library"
  )
  )

}

This lets Shiny look for packages installed in your own library preferentially and also keeps the packages you use to develop the app and the packages used when the app is deployed in sync.

Note that you may need to tweak permissions of your library folder for the shiny user to see it properly. Otherwise it will fail to look into your specified location without any error message.




回答4:


I have upgraded from R 3.2 to 3.4 and faced the same issue, then i have created a folder named 3.4 in R/x86_64-pc-linux-gnu-library/ and copied everything from 3.2 folder (which is already there in the same location).




回答5:


If the package is installed in your R library. The easiest way to make it run on shiny-server is to indicate to Shiny the library directory where the package is. Something like: library(plyr, lib.loc="/usr/local/lib/R/site-library") . If you have R-Studio installed, you can view the directory with .libPaths()




回答6:


Why do you need Plyr? nothing in your code is using it; but anyway, you can install packages on Linux R installation by running R , then, install.packages('plyr');



来源:https://stackoverflow.com/questions/16065805/packages-missing-in-shiny-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!