博文

目前显示的是标签为“shiny”的博文

Mastering shiny(一)基础篇

图片
 最近又要写app了,记录一下笔者认为的要点方便以后回顾,主要来自官方的 Mastering shiny 的Get started部分。PS:这本书习题答案在 这里 。 1、编写中的要点 1.1  使用响应表达式来减少代码重复 重复的代码,比如反复读取数据,会浪费算力,增加维护难度。传统的做法是单独使用一个变量来捕获input,或者使用函数来捕获计算。但是此处介绍了一个新的方法,即响应表达式—— reactive expressions 。 基本用法是用reactive({...})函数把你获取变量的代码包起来,他会在需要的时候更新。 server <- function(input, output, session) { # Create a reactive expression dataset <- reactive({ get(input$dataset, "package:datasets") }) output$summary <- renderPrint({ # Use a reactive expression by calling it like a function summary(dataset()) }) output$table <- renderTable({ dataset() }) } 1.2 中括号 如果render里有多行代码才需要加中括号。render中应该尽量减少计算。 1.3 UI和server输出的对应关系 textOutput()对应renderText()或renderPrint(),前者输出字符串,后者是R里的代码运行输出格式。 tableOutput()对应renderTable(),dataTableOutput()对应renderDataTable(),前者一般用于小的表格,后者表格可以交互。 plotOutput()对应renderPlot(),可以输出base、ggplot2和plotly等交互图。 2、前端——UI 2.1 Inputs shiny中有许多不同的输入函数可供使用,如 sliderInput() ,  selectInput() ,  textIn...

docker部署shiny app详细教程(二)shinyProxy配置

       因为各种原因,笔者用shiny写了个数据库修改前端,本来以为和其他app一样,结果发现因为同时在线编辑人数过多,编辑完了大家还都不关网页,shiny还设置成不自动断联,导致app冲突。。。查了一圈(推荐 这篇文章 ,详细介绍了shiny的问题),据说  shinyProxy 是解决多人用户+开源shiny-sever的最好的解决方案。简单地说,shinyProxy就是把app运行在docker环境里,每个用户分配一个容器,所以需要docker还有部署shiny app的相关的知识,可以看看 教程(一) 。       下文基于centos7,其他配置环境也就是安装软件和docker操作的不同。 1     安装环境 需要以下: JAVA 8以上 docker 需要特定端口,默认使用2375端口,需修改设置: 创建以下文件: /etc/systemd/system/docker.service.d/override.conf [Service] ExecStart= ExecStart=/usr/bin/dockerd -H unix:// -D -H tcp://127.0.0.1:2375 然后重启docker sudo systemctl daemon-reload sudo systemctl restart docker 也可以修改配置文件,但是记得先做好配置备份: /lib/systemd/system/docker.service /usr/bin/dockerd -H unix:// -D -H tcp://127.0.0.1:2375 2     安装shinyProxy 需要根据你的安装环境,到 官网 或者 github 下载安装包。安装方法详见 官方说明 。 wget https://www.shinyproxy.io/downloads/shinyproxy_2.5.0_x86_64.rpm sudo rpm -i shinyproxy_2.5.0_x86_64.rpm 安装成功后,可以用下述命令查看shinyproxy的路径和状态: systemctl status shinyproxy 3   ...

docker部署shiny app详细教程

不了解docker的可以自己搜,这里就不赘述了(本文已经很啰嗦了😅)。我是初学者,第一次打包可能有很多写的不对的,欢迎大家评论里批评指正。项目已上传 github 。 为什么 用docker部署R脚本或者shiny app越来越受到R用户的推崇,因为R有两点尤其被诟病(特别是被我周围的python用户们😅): 1.  在安包时经常遇到报错,而且在天朝不用代理,下载速度还很慢,R和Rstudio的代理还得在环境里再设置一遍,否则他不走系统的代理; 2.  版本一更新,R包载入挂了,或者是某函数挂了,得手动安旧版本才能运行(我的部长特别喜欢更新服务器内核,一更新R就升级了,然后有些老软件就挂了😂);python里有virtualenv这个文明利器,可以隔离不同python版本环境,R我目前还没找到可以替代的。 用docker部署R程序就可以很好地解决上述问题,使R脚本的稳定性和可用性大大提高,交付直接给他docker包,只要是会用docker的都能够运行,且和你得到相同的结果,以后就不用再听他们发牢骚了😆。 怎么做 本文主要介绍shiny app的docker部署,操作环境是CentOS7,shiny是一个网页服务,用docker打包特别方便部署。注意本文是讲如何将app整个打包到docker里,如果只想部署shiny-sever可以直接使用现成的镜像。 一、安装docker  docker的安装可以查看 官方文档 ,不同系统在文档里都能找到。 运行 sudo systemctl start docker 权限 docker命令需要使用sudo权限,如果想给无sudo权限用户使用,请把他加入docker组: sudo usermod -aG docker  username 使用代理 如果想要使用代理下载镜像需要创建如下文件: sudo mkdir -p /etc/systemd/system/docker.service.d sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf 然后往文件添加代理以下信息: [Service]      ...