CentOS 下 RStudio Server 中 knitr 与 TeXLive

首先安装 TeXLive,用 DVD 或者网络安装都可以,在安装时最好选择创建符号连接,这样不用再手动修改 PATH。组件的部分,我的习惯是去除多余的语言支持,保留 CJK 基本组件和中文。

装好之后,需要配置中文字体,CentOS 自带文泉驿和思源黑体,用下面的命令安装:

如果还需要其他字体,比如非常漂亮的 Adobe 字体集(Adobe 仿宋、Adobe 黑体、Adobe 宋体等,Adobe Acrobat 自带),就给每个字体建立一个目录,然后 cp 到 /usr/share/fonts 中。

在全部字体装完后,为了让 XeLaTeX 可以使用系统字体,按官方文档的做法,将 TEXMFSYSVAR/fonts/conf/texlive-fontconfig.conf 复制到 /etc/fonts/conf.d/09-texlive.conf,对 TeXLive 2015,就是

然后执行

为了知道系统中有哪些中文字体可用,可以执行下面的命令

会将中文字体名称输入到 zhfont.txt,然后使用每行冒号前的名称即可(中英文名称都试一下)。

对 RStudio 来说,使用 RMarkdown,如果需要输入中文,在同目录新建文件如 cjk_header.tex,内容如下:

然后在 .Rmd 文件的文件头 output 的 pdf_document 处加入 includes 和 latex_engine 字段,如下:

这时再进行 Knit,就可以显示中文了。

MariaDB/MySQL 数据库中文乱码初探

MariaDB 架设在 Windows Server 2008 R2 上,用 Oracle VirtualBox 架设 CentOS 虚拟机安装 RStudio Server,同时本地 Windows 7 运行 RStudio。

我尝试了不同的组合,分别在 CentOS 和 Windows 上写入和读取含有中文的表格,并用 SET NAMES gbk/utf8 改变编码,结果发现没有一种组合可以同时完成读取和写入的工作……

所做的尝试如下:

服务器/数据库 写入/读取 CentOS Windows
utf8/utf8
写入 OK Error
读取 utf8 gbk
utf8/gbk
写入 Error OK
读取 utf8 gbk
gbk/utf8
写入 OK Error
读取 utf8 OK
utf8/utf8
写入 Error OK
读取 utf8 OK

后面会再研究 MariaDB 字符编码传输实现细节,看是否能够统一。

通过 RRO 为 R 添加 Intel MKL 支持

R 中 BLAS 模块是用来进行矩阵计算等的,而 R 本身带的 BLAS 和 LAPACK 模块运算效率较为低下,我们可以通过替换这两个模块实现运算速度的大幅增加。

RRO(Revolution R Open)是 Revolution 出品的第三方 R 版本,在其中使用了 Intel MKL 库作为 BLAS 和 LAPACK 的运算库,大大提高了 R 的矩阵运算效率。由于 Intel MKL 为收费组件,我们无法直接得到,因此可以通过 RRO 提供的 RevoMath 附加包令官方 R 版本具有 Intel MKL。

下面是 Windows 和 Linux 下的替换方法:

1、Windows

最简单的方法是安装 RRO 和 RevoMath。当然,如果我们不想用 RRO,也可以通过安装 RRO 和 RevoMath,然后提取
$R_HOME$\bin\x64 中的 libiomp5md.dllRblas.dllRlapack.dll 放入官方 R 版本中的相同目录,并覆盖原文件。(如果考虑随后的切换,也可以备份原来的 Rblas.dllRlapack.dll。)为了可以调节运算所需 CPU 单元,也可以将 RRO 的 library 中的 RevoUtilsMath 目录复制到官方 R 版本中的 library 目录。

2、Linux

我这里以 openSUSE 13.2 64-bit 为例说明。 $R_HOME$/usr/lib64/R,下载 RRO 官网上的 openSUSE 条目下 MKL 文件(RevoMath 3.2.4),解压缩后复制到 $R_HOME$lib 文件夹,在该文件夹下执行:

同时修改 $R_HOME/etc/Rprofile.site 文件(没有则创建该文件),增加如下两行:

这时可以进行测试,运算速度将得到极大提升。

采用 ATT 上 R Benchmarks 中的 R Benchmarks 2.5,在替换 Intel MKL 后的系统中,结果如下:

R Benchmark 2.5
   ===============
Number of times each test is run__________________________:  3

I. Matrix calculation


Creation, transp., deformation of a 2500x2500 matrix (sec): 0.996666666666594 2400x2400 normal distributed random matrix ^1000____ (sec): 0.363333333332776 Sorting of 7,000,000 random values__________________ (sec): 0.64333333333343 2800x2800 cross-product matrix (b = a' * a)_________ (sec): 0.486666666665769 Linear regr. over a 3000x3000 matrix (c = a \ b')___ (sec): 0.310000000000097 -------------------------------------------- Trimmed geom. mean (2 extremes eliminated): 0.484534047305902 II. Matrix functions
FFT over 2,400,000 random values____________________ (sec): 0.39666666666623 Eigenvalues of a 640x640 random matrix______________ (sec): 0.336666666666739 Determinant of a 2500x2500 random matrix____________ (sec): 0.266666666666424 Cholesky decomposition of a 3000x3000 matrix________ (sec): 0.25 Inverse of a 1600x1600 random matrix________________ (sec): 0.263333333333018 -------------------------------------------- Trimmed geom. mean (2 extremes eliminated): 0.287006387703729 III. Programmation
3,500,000 Fibonacci numbers calculation (vector calc)(sec): 0.603333333333164 Creation of a 3000x3000 Hilbert matrix (matrix calc) (sec): 0.283333333332242 Grand common divisors of 400,000 pairs (recursion)__ (sec): 0.48000000000017 Creation of a 500x500 Toeplitz matrix (loops)_______ (sec): 0.376666666667006 Escoufier's method on a 45x45 matrix (mixed)________ (sec): 0.319999999999709 -------------------------------------------- Trimmed geom. mean (2 extremes eliminated): 0.386767050168976 Total time for all 15 tests_________________________ (sec): 6.37666666666337 Overall mean (sum of I, II and III trimmed means/3)_ (sec): 0.377475216986724 --- End of test ---

而替换前的结果为:

R Benchmark 2.5
   ===============
Number of times each test is run__________________________:  3

I. Matrix calculation


Creation, transp., deformation of a 2500x2500 matrix (sec): 0.979999999999998 2400x2400 normal distributed random matrix ^1000____ (sec): 0.376666666666666 Sorting of 7,000,000 random values__________________ (sec): 0.643333333333333 2800x2800 cross-product matrix (b = a' * a)_________ (sec): 10.71 Linear regr. over a 3000x3000 matrix (c = a \ b')___ (sec): 5.05 -------------------------------------------- Trimmed geom. mean (2 extremes eliminated): 1.47113039784771 II. Matrix functions
FFT over 2,400,000 random values____________________ (sec): 0.396666666666671 Eigenvalues of a 640x640 random matrix______________ (sec): 0.650000000000001 Determinant of a 2500x2500 random matrix____________ (sec): 2.52 Cholesky decomposition of a 3000x3000 matrix________ (sec): 4.02000000000001 Inverse of a 1600x1600 random matrix________________ (sec): 2.63 -------------------------------------------- Trimmed geom. mean (2 extremes eliminated): 1.62713360762634 III. Programmation
3,500,000 Fibonacci numbers calculation (vector calc)(sec): 0.636666666666665 Creation of a 3000x3000 Hilbert matrix (matrix calc) (sec): 0.269999999999991 Grand common divisors of 400,000 pairs (recursion)__ (sec): 0.473333333333329 Creation of a 500x500 Toeplitz matrix (loops)_______ (sec): 0.383333333333345 Escoufier's method on a 45x45 matrix (mixed)________ (sec): 0.349999999999994 -------------------------------------------- Trimmed geom. mean (2 extremes eliminated): 0.398967243235916 Total time for all 15 tests_________________________ (sec): 30.09 Overall mean (sum of I, II and III trimmed means/3)_ (sec): 0.984775438409437 --- End of test ---

可以看出,效率的提高还是很明显的。另外,经实验,Intel MKL 比 OpenBLAS 效率略高。

openSUSE 安装 RStudio Server

在 openSUSE 上安装 RStudio Server 时会提示

这主要是由于 openSUSE 中 openssl 库文件版本与 RStudio Server 要求不一致导致。可以通过符号链接产生所需文件,从而令 RStudio Server 正常启动。命令如下(openSUSE 13.2 + openssl 1.0):

32 位:

64 位:

分别在 32 位和 64 位库文件目录建立了 libssl.so.6libcrypto.so.6 的符号链接。

这时,RStudio Server 已经构建在了 http://localhost:8787 上。

为了访问方便,还可以通过 Apache 的代理服务将 RStudio Server 进行进一步封装以提高安全性和便利性。在 Yast2 中打开 HTTP 服务器设置,打开防火墙,在 Server Modules 中将 proxyproxy_http 改为 Enable,同时在 Main Host 中加入如下条目:

在 openSUSE 下 R 中安装 ROracle 的办法

openSUSE 下 R 中安装 ROracle 与 Windows 下相同,也要安装 OCI。幸好 openSUSE 中有 Instant Client,在 Package Search 中查找 oracle-instantclient 即可直接安装。除此之外,还需要安装 oracle-instantclient-devel

在 CRAN 上下载 ROracle 源码文件,当前版本是 1.1-11,文件为 ROracle_1.1-11.tar.gz

在终端中运行下列语句即可:

其中 oci-liboci-inc 改为与系统一致的路径。

在 openSUSE 下 R 中安装 rJava 出错的处理

2015 年 6 月 1 日更新 : 将 java-1_8_0-openjdkjava-1_8_0-openjdk-develjava-1_8_0-openjdk-headless 安装后,运行 R CMD javareconf 并未报错,且 rJava 安装正常。


在 openSUSE 13.1 下运行 R 并安装 rJava 时,出现了如下错误:

查看网上说明,认为是系统 Java 运行库与用户 Java 运行库矛盾导致的。解决方法很简单,只需要在 ~/.bashrc 文件中加入如下代码:

另外, java-1_x_x-openjdk-headless 一定要装上。