learning learn examples ejemplos r shiny devtools

learn - desarrollando una aplicación brillante como paquete y desplegándola en un servidor brillante



shiny r io (2)

Estoy desarrollando una aplicación brillante y, como quería utilizar pruebas y documentación automatizadas de la función, comencé a desarrollar la interfaz dentro de un paquete (como se recomienda here ).

Desarrollo esta aplicación brillante dentro de RStudio y tengo un archivo server.R que puedo hacer clic en el botón Ejecutar aplicación dentro de RStudio y todo funciona. Confío mi paquete en un repositorio de github y, desde este punto, quiero instalarlo en mi servidor R shiny usando devtools y la función install_github .

Ahora me pregunto cómo iniciar mi aplicación dentro del servidor. Pensé ingenuamente en instalar el paquete y apuntar al archivo server.R , pero de alguna manera esto no funciona. No estoy seguro de dónde están los problemas.

Mi segundo intento fue crear un archivo llamado app.R en una carpeta a la que puede acceder el servidor brilloso y en este archivo, básicamente, cargo mi paquete, el brillo y otros paquetes necesarios, pero de alguna manera se queja porque faltan variables ...

¿Alguien me puede dar un consejo? También me complace responder a cualquier pregunta, ya que no estoy seguro de cómo hacer este problema correctamente. Gracias por adelantado.

EDITAR Desplegar en servidor brillante

Como Colin D estaba preguntando en los comentarios, cómo implementar estos paquetes en un servidor brillante, quería demostrar cómo lo hago.

En primer lugar instalo mi paquete en el servidor brilloso directamente a través de la línea de comando como root con el siguiente comando.

su - -c "R -e /"devtools::install_github(''user/shinypackage'')/""

El siguiente paso es cambiar el propietario de la carpeta del paquete

chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/

Luego reinicio el servidor brilloso porque a veces esto era problemático con el almacenamiento en caché o algo así.

systemctl restart shiny-server

Estos son los pasos que hago cuando actualizo mi aplicación brillante. Normalmente hago esto de nuevo como root en una sola línea.

su - -c "R -e /"devtools::install_github(''user/shinypackage'')/"" & chown -R shiny:shiny /usr/local/lib/R/site-library/shinypackage/ & systemctl restart shiny-server

Una cosa que aún debemos hacer es configurar el directorio en el shiny-server.conf . Acabo de agregar la ruta del paquete + el directorio de la aplicación donde se guardan ui.R y server.R .

location /shinypackage { app_dir /usr/local/lib/R/site-library/shinypackage/application; log_dir /var/log/shiny-server; }

Luego tengo que reiniciar el servidor nuevamente usando systemctl restart shiny-server .

Esto está en uso en un servidor de Ubuntu.


Cuando hago aplicaciones brillantes como un paquete independiente, por lo general organizo los archivos así:

En el directorio R:

  • Todos mis métodos para admitir la aplicación (estos deberían exportarse si se usarán en los ui.R , server.R o global.R )
  • Una función launch_application

La definición de launch_application es similar a:

launch_application <- function(x, ...) { shiny::runApp(appDir = system.file("application", package = [my_pkg]), ...) }

En el directorio inst

  • application/server.R
  • application/ui.R
  • application/global.R

Después de construir e instalar el paquete, solo necesito ejecutar

library(my_pkg) launch_application(...)


Ya hay una respuesta aceptada con muchos votos, pero me gustaría agregar algunas cosas, así que también me responderé. Para obtener más información, puedes leer mi artículo Complementando tu paquete R con una aplicación Shiny .

Esta es la estructura de carpetas que uso:

- mypacakge |- inst |- myapp |- ui.R |- server.R |- R |- runApp.R |- ... |- DESCRIPTION |- ...

Dentro de la carpeta R/ es donde coloco todo el código no brillante. El código de la aplicación brillante vive en inst/ . El archivo R/runApp.R se define como

#'' @export runExample <- function() { appDir <- system.file("myapp", package = "mypackage") if (appDir == "") { stop("Could not find myapp. Try re-installing `mypackage`.", call. = FALSE) } shiny::runApp(appDir, display.mode = "normal") }

(Puede ver esto en acción; por ejemplo, shinyalert usa esta estructura para su aplicación de demostración).

En un comentario, preguntó cómo se puede implementar esto en un servidor brillante. Es simple, simplemente puede tener un archivo /srv/shiny-server/myapp.app.R que llame y ejecute ese paquete (después de haber instalado el paquete en el servidor):

dir <- system.file("myapp", package = "mypackage") setwd(dir) shiny::shinyAppDir(".")

(Puedes ver esto en acción también, codifica here )