假设你的App脚本已经写好了(里面至少包含Server.R和ui.R)
一,Windows下通过cmd执行App
只需两个步骤:
1. 在系统变量Path中添加:E:\你的R安装路径\bin
2. 运行cmd,执行:R -e “shiny::runApp(‘C:\Windows下你的App路径\你的App名称’)”
这个时候呢,cmd会提示里进入到一个网站:127.0.0.1:XXXX,在浏览器点进去就OK啦,
然并卵,这并不算部署到网上=。=
二,使用Windows通过shinyapps.io部署到网上
对,这TM就是个坑QAQ
1, 这需要使用到rsconnect包,关于怎么用rsconnect,请点这个链接:
《Getting started with shinyapps.io》
2, 如果我的推理没错的话,你应该会采用如下步骤:
library(rsconnect)
rsconnect::setAccountInfo(name='你注册时取的名字', token='一长串字符', secret='一长串字符')
rsconnect::deployApp('C:\\Windows下你的App路径\\你的App名称')
3,然后就无情的报错了:
Failed to lint file 'Server.R'
The linter failed with message:
invalid multibyte string at '<8d>'<2c>','乱码')'
4,卧槽,multibyte string是什么鬼 ?_?
在网上查了一下,这个错误应该是数据编码的问题。我读取数据用的是read.csv(),但在Windows下无论怎么改encoding和fileEncoding参数都没有卵用。另外,如果用cmd执行,read.csv()建议使用相对路径(在你的App文件夹下再创建一个data文件夹,把用到的数据放进去,然后read.csv(“.\数据.csv”))。
总而言之我(作为一个菜鸡)感觉,用Windows部署ShinyApp就是一个大坑。没办法,只能改换Linux。
三、使用Linux(CentOS 6)部署
Linux的好处是,只要我在Rstudio里面能执行这个App,也就是shinyApp(ui, Server)能执行,跳出来一个网页,那么它保存成Server.R和ui.R之后通过rsconnect就一定能部署到网上。
然后你以为这样就解决问题了?
并没有,还是read.csv()出错,在Windows下,我的命令如下,不会报错
tree=read.csv('数据.csv',header = T)
- 但是在Linux下,需要改encoding和fileEncoding参数。如果数据里面包含中文,建议将encoding 设为’UTF-8’,fileEncoding 设为 ‘GB2312’(有时候得设成GBK),然后就可以正常使用和展示数据了。
tree=read.csv('数据.csv',header = T,encoding = 'UTF-8', fileEncoding = 'GB2312')
- App成品网址在下方,测试用的所以做的很简陋: