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中文乱码实际上是只出现在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")

可以看到(如果你没有更改配置语言的话),应该显示你当前的语言是中文,奇怪的是,我们需要一个非中文的编译环境才能完成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")

改变windows的全局语言会出两个小问题:

  1. 加载某些包的时候,会有一些报错和警告出现乱码,不过也只有加载包的时候会出现,并不影响平时的使用。

  2. shiny的中文支持也依赖于这个环境语言的设置,和Slidify的设置刚好相反,Shiny的中文一定要求环境语言是中文!所以设置了Windows的环境语言在使用shiny的时候又要改回原先的编码形式了…