回忆一下
到目前为止,我们创建的xxx-app 文件夹内包含:
- data 文件夹,用来存放需要读取的数据
- www 文件夹,用来存放需要读取的图片
- helpers.R 通常包含主脚本中需要的函数,有时也可以用来进行一些额外的配置,比如创建文件等(在app 脚本中需要source 该脚本)
- app.R 主脚本,包含ui、server 两个部分,以及shinyApp(ui, server) 语句
分享的方法
1)直接打包给其他人
就像是我们可以把R 包文件夹压缩起来,别人可以直接install 从本地安装它一样,我们也可以把xxx-app 文件夹保存起来传给别人,其他人只需要在该路径下运行:
# install.packages("shiny")
library(shiny)
runApp("xxx-app")
2)外部获取
runUrl
- 首先将xxx-app 文件夹打包为.zip;
- 将该zip 上传到服务器或者网络中,运行相关的链接:
library(shiny)
runUrl( "<the weblink>")
自己测试发现其实有非zip 的文件夹也行。
之前一直在用下面的地址进行加速:
发现会出现如下问题:https://www.tangruiping.com/post/jsdelivr-failed-to-fetch-version-info-for.html
解决方案是使用一个油猴脚本获取的地址:
https://github.com/du33169/gh-proxy-buttons
比如我的火箭标志给的链接内容放到代码里:
> runUrl("https://gh-proxy.du33169.workers.dev/https://github.com/mugpeng/all_mess/archive/refs/heads/main.zip")
这样即使是github,也可以加速访问了。
如果是github 其实也有专门的函数:
runGitHub( "<your repository name>", "<your user name>")
如果你的shiny 内容只是简单的代码的话,也可以上传到https://gist.github.com/:
runGist("<gist number>")
# where "<gist number>" is the number that appears at the end of your Gist’s web address
它提供了一种匿名分享代码的方法。
3)作为网页分享
如果你需要把内容分享给一个没有R 和shiny 的人(比如你的老板),其实可以把shiny 内容输出为一个网页(这其实也是我们的最终目的,上线它!)。
一共有以下几种策略:
- shinyapps.io
- Shiny Server
- RStudio Connect
shinyapp.io
网站上就有相关的教程,配置起来,非常简单。
首先需要再Rstudio 中获得相关的接口。
设置好后,其实也就是一个R 包一个函数的事情:
rsconnect::deployApp('./App-1')
比如我的网页:
https://mugpeng.shinyapps.io/app-1/
这样,即使是不懂R 的人,只要他会上网,就OK 的了。
shiny server
虽然我们可以白嫖shiny 官方的在线服务,但毕竟还是人家的,而且确实访问有时非常感人。
如果有条件,完全可以部署在自己的服务器上,并且分配一个域名,就相当于做了一个自己的网站了。
参见:https://github.com/rstudio/shiny-server/blob/master/README.md