解名缰 鸟倦飞

Rhelper-RGtk2版本

2010 年 08 月 09 日 | 分类于 R学习中

寒假的时候用wxWidgets程序库写过一个Rhelper小程序,初衷是在chm类型的帮助文档被取消后,能提供一个类似的查看帮助的环境。当时编的那个程序基本实现了这一目标,但它有两个比较大的缺点:一是程序与R相脱离,调用起来不方便;二是程序只能在Windows下运行,对操作系统有依赖。由于当时能力和时间有限,所以也就没再多加考虑。

之后,从谢老大那里得知了有gWidgets包的存在,顿时兴奋不已,因为这个包可以用简单的语句生成一系列的图形界面,而且不依赖于操作系统,甚至不依赖于图形界面库(GTK+,Java,tcl/tk等)。谢老大也以这个包为主题在第三届中国R语言会议上做了报告

当然了,越是方便的工具,其功能也越容易受到限制。就Rhelper来说,有两个问题必须要得到解决,一是要实现文档格式化(比如以HTML的形式展现),二是要实现超链接跳转。这两个要求在wxWidgets中都有现成的程序库可以解决,可是在gWidgets中都很难实现。Omegahat曾经开发了一个RwxWidgets包,用来在R中调用wxWidgets,可是这个包很久没有更新,而且似乎在Windows下很不稳定。最后综合各方面的因素,决定用比较底层的RGtk2包来实现Rhelper的功能。

由于RGtk2包没有直接解析HTML的控件,所以文档的格式化成了程序中最大的一个难题。目前我是直接从Rd文档中获取文字和相应的标签,然后对不同的标签应用不同的格式。下面是两张效果图,分别是Windows下和Ubuntu下的运行界面:

Windows下运行界面

Ubuntu下运行界面

其中蓝色的链接都是可以点击的(光标不会变成手形),不过目前Rd文档的解析仍然是个大工程,有很多函数的文档会出现格式混乱的现象,这个还需要不断修补。总之这个程序还只是一个初步的框架,很多细节仍有待完善。

附件:程序代码下载

用的时候输入 Rhelper("&&") 之类的就可以了。