前两天去第四届R语言会议,听各位大牛的讲座,讲到了 C, Perl, Excel, Matlab, C++, .Net 等与R的交互。这里我补充一个 Common Lisp中与R的交互方式。
首先试用的Lisp实现是 SBCL , (其他的 CLisp, CCL 等应该也是可以的,我没有尝试).
使用的库是 rcl 。 推荐安装库的方式是通过 quicklisp ,安装很简单:
(ql:quickload "rcl")
安装好后,通过 asdf调入:
(asdf:oos 'asdf:load-op "rcl")
使用:
(use-package :rcl)
(r-init) ;; 首先初始化 R的环境
* (r "seq" 1 5) ; 调用 R的函数
(1 2 3 4 5) ; 返回的结果就是一个标准的Lisp列表
* (r "summary" '(3 5 7 2 9 12 52)) ;; 调用R的函数 , 传入的是一个标准的Lisp列表做参数
(2.0d0 4.0d0 7.0d0 12.86d0 10.5d0 52.0d0)
((:NAMES "Min." "1st Qu." "Median" "Mean" "3rd Qu." "Max.")
(:CLASS "summaryDefault" "table"))
可以看到 R与Common Lisp中的调用,数据交互是很方便的。
整个RCL接口库也很简单,只包含如下的方法:
* (listlib :rcl)
R
R%
R-INIT
WITH-DEVICE
ENABLE-RCL-SYNTAX
=====
实例: 调用R绘图:
<br />
(use-package :rcl)<br />
(r-init)<br />
(enable-rcl-syntax)</p>
<p>(defun plot-1 ()<br />
(with-device ("/tmp/s0" :png)<br />
(r "hist"<br />
(r "rnorm" 100 :mean 10 :sd 1)<br />
:main "测试Lisp调用R绘图"<br />
:ylab "数量"<br />
:xlab "样本")))</p>
<p>(plot-1)<br />
生成的图片见7楼 http://cos.name/cn/topic/104458#post-219590</p>
以后有了更多实际开发经验,再补上些例子。