Skip to content

Instantly share code, notes, and snippets.

@adrisede
Forked from wch/app.R
Created June 22, 2022 21:00
Show Gist options
  • Select an option

  • Save adrisede/d8113e4f991b2c6e1c994bf5537c1e2a to your computer and use it in GitHub Desktop.

Select an option

Save adrisede/d8113e4f991b2c6e1c994bf5537c1e2a to your computer and use it in GitHub Desktop.
Example Shiny app that automatically installs a source package when deployed to shinyapps.io
# By default, the directories in .libPaths() aren't writable on shinyapps.io, so
# create a subdir where we'll install our package.
if (!file.exists("R-lib")) {
dir.create("R-lib")
}
# Unfortunately, there's no way to get deployapp() to ignore this directory, so
# make sure to remove it locally before you call deployapp(). This can be done
# with:
# unlink("pkgInst/R-lib", recursive = TRUE)
# You may also need to restart R before calling deployapp(), because calling
# runApp() will modify your libpath (below), which can confuse deployapp().
# Add ./R-lib/ to the libPaths
.libPaths( c(normalizePath("R-lib/"), .libPaths()) )
# Install the package if needed.
if (!do.call(require, list("myPackage"))) {
install.packages("myPackage_0.1.tar.gz", repos = NULL, type = "source")
}
# Instead of `library(myPackage)`, we'll use do.call, to evade deployapp's
# checks for packages installed locally from source.
do.call(library, list("myPackage"))
shinyApp(
ui = fluidPage(
p(
"The output of the function is: ",
verbatimTextOutput("text")
)
),
server = function(input, output) {
output$text <- renderPrint({
# This function is in myPackage
myFunc()
})
}
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment