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?
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.
sudo passwd shiny
, now enter and confirm a passwordsu - shiny
R
using $ R
(without sudo)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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With