跟着上一篇部署好R连Oracle以后,接着就是给windows布置一个任务让它自动运行R代码了。因为我不是学cs的,网上那些要在cmd里敲命令的教程我一个都没成功。找了很久,终于在stackoverflow上看到一篇帖子,介绍了taskscheduleR这个包。它最大的优点就是在Rstudio里有个Addin的界面,不需要敲命令,只要鼠标点点就好了,非常方便。
安装taskscheduleR需要通过github,没办法在CRAN里安装,而通过github安装需要fq,很坑爹,公司电脑不行,只得先用家里的mac把包下载下来。但这个包只能windows系统用,所以它检测到我是mac以后就自动删除了。没办法,只好请在国外的同学帮我下载,之后把library里这个包的文件夹压缩后发给我,我解压缩后放入对应的library目录下就可以正常使用了。它的github页面上有详细的操作说明,包括怎么安装Rstudio的插件,这里我就不赘述了。
但我还是碰到了问题。所有代码在Rstudio里正常运行无任何错误,但是用taskscheduleR启动就不行,报错也是莫名其妙的。经过过年前两天工作日断断续续的排查,终于发现又是encoding的锅。如上一篇所说,为了让RODBC读取的中文正常显示,需要将Rstudio的默认编码改为utf8,而windows的任务计划似乎是不支持utf8的。解决方法是,将生成报表的代码原封不动的保存(这里假设叫test.R),另开一个文件,写上一行代码:
source('test.R', encoding = 'utf-8')
将这行代码保存为R文件,然后在tasksheduleR里指定运行该文件即可。
同时需要注意的是,如果要通过rmarkdown生成文档,也要指定encoding为utf-8:
rmarkdown::render('test.Rmd', encoding = 'utf-8')
至此,R就可以非常顺畅地自动化运行报表了。在摸索的过程中,最大的感想就是encoding真是好大一个坑啊!