Sldify解决中文乱码
slidify是款用Rmd生成精美slides的R包,作者是Ramnath Vaidyanathan。这个包并没有在CRAN的镜像上,而是托管在Github上,需要用以下方法安装:
(在运行之前需要保证安装了devtools
,如果没有请跑下install.packages(‘devtools’)
)
library(devtools)
install_github("slidify", "ramnathv")
install_github("slidifyLibraries", "ramnathv")
不过在Slidify使用的过程中会出现几个比较难受的问题,尤其是在windows下编译中文的Slidify会出现乱码.本文叙述了Slidify下解决这个bug的方法.
Slidify解决中文乱码
Slidify中文乱码实际上是只出现在windows平台,若是追寻其原因还是因为是windows的编码方式造成的(windows是GBK编码,而基本上linux,OS,以及R的用的是UTF-8的编码)
比如,在编写了一个中文的slidify的Rmd文件,使用以下命令来进行编译的时候,会报错
slidify("index.Rmd")
Error in substring(string, start, end) :
invalid multibyte string at <ba>
<73>ubtitle : 姝f€佸彉閲忕殑浜屾鍨<8b>
对此,我有三种解决办法,第一种是使用knitr来进行编译,第二种是改变R的环境语言,第三种是改变windows的环境语言,几种方法各有利弊.
I 改为使用 knitr 进行编译
最新版的knitr和Slidify已经相互支持,可以再Slidify的YAML里面增加一行:
knit : slidify::knit2slides
也就是使用knitr来进行编译,编译就绕过了slidify()
函数,而是改用Rstudio的按钮:knit HTML
来完成,可以完成中文语言的支持.
II 改变R的环境语言
实际上slidify
函数出错是因为R的环境语言的设置问题造成的.首先,我们可以用这个函数查看当前设置的语言:
Sys.getlocale("LC_CTYPE")
## [1] "English_United States.1252"
可以看到(如果你没有更改配置语言的话),应该显示你当前的语言是中文,奇怪的是,我们需要一个非中文的编译环境才能完成Slidify的中文编译,逻辑上有些抽象,而事实上运行一段设置R语言环境的代码就可以完成这个工作:
Sys.setlocale("LC_CTYPE", "English_United States.1252")
换句话说,如果使用slidify
编译不出来就可以改用以下的代码:
Sys.setlocale("LC_CTYPE", "English_United States.1252")
slidify("index.Rmd")
不用担心,这个方法只是改变了R的环境语言,并不影响系统的配置,甚至在下一次启动R的时候,会自动改回"Chinese (Simplified)_People’s Republic of China.936"
的语言形式.
这也是第二个方法的弊端:每次打开R都要重新运行一遍这个代码.
III 改变系统语言环境
这个方法一劳永逸,是个大杀器,不过还是有一两个小弊端的,先说下操作方法:
开始>>>>>控制面板>>>>>>时钟,语言和区域
打开区域和语言,更改语言为 英语(美国)
之后重新启动R,再运行查看R的环境语言就可以看到已经改成英文的环境了
Sys.getlocale("LC_CTYPE")
## [1] "English_United States.1252"
改变windows的全局语言会出两个小问题:
加载某些包的时候,会有一些报错和警告出现乱码,不过也只有加载包的时候会出现,并不影响平时的使用。
shiny的中文支持也依赖于这个环境语言的设置,和Slidify的设置刚好相反,Shiny的中文一定要求环境语言是中文!所以设置了Windows的环境语言在使用shiny的时候又要改回原先的编码形式了…