R语言源码解析

转载 2016年08月29日 00:22:16

http://qiangkou.me/2015/10/01/r-src/

R语言是一门专门用于数据分析的领域特定语言(DSL),多数R语言用户并不了解R解释器的内部。这和使用者的背景直接相关。对R底层有一定了解之后,对R可能会有完全不同的评价,是好是坏,就因人而异了。

这里我把以前读R源代码的笔记整理出来,希望对想了解R底层机制的朋友有所帮助。主要涵盖以下内容:(1)R解释器的初始化和R语句求值;(2)R底层的SEXP结构以及相关的API;(3)environment究竟是什么;(4)basemethod包;(5)compiler包,也就是JIT编译的原理;(6)R里一些缺乏注释的黑暗角落,这些会穿插在各个章节之间。

这本书不是一本R语言教程,市面上的R语言图书已经足够多了。这里不会涉及任何直接的R语言使用的问题,对于R语言使用基本上没有任何帮助。

有两点需要说明:首先,这份源码解析基于3.2.2,源代码可以从这里下载;其次,我个人对图形设备和Windows系统的了解很有限,这里就不涉及这两方面的内容了。

作为一个学生物出身的野生码农,我的主要自学资料就是各种开源项目的源代码。一个人的命运,当然要靠自我奋斗,但是也要考虑到历史的行程,我绝对不知道我作为一个生狗怎么去做码农了。

R社区里的很多人都教了我很多东西,在这里特别感谢我在社区里的导师Dirk。另外这里单独感谢我至今没有露面的女朋友,所以我才有足够的时间读代码和写代码。

我们先从R源代码的组成开始,方便大家对照书中的内容查询源代码。R解压缩之后的结构如下所示。我们的主要关注点自然在src上,其它部分主要用于环境配置,其中po用于多语言支持。

.
├── COPYING
├── ChangeLog
├── INSTALL
├── Makeconf.in
├── Makefile.fw
├── Makefile.in
├── README
├── SVN-REVISION
├── VERSION
├── VERSION-NICK
├── config.site
├── configure
├── configure.ac
├── doc
├── etc
├── m4
├── po
├── share
├── src
├── tests
└── tools

src的内容如下,其中gnuwin32用于支持Windows上编译和使用R。除了gnuwin32,多数部分在书后续内容都会提到。

.
├── Makefile.in
├── appl
├── extra
├── gnuwin32
├── include
├── library
├── main
├── modules
├── nmath
├── scripts
└── unix

关于源代码阅读工具,我这里推荐的是htags,在源代码目录里使用htags --suggest就可以生成一个网页版的源代码,查询和跳转支持都不错。

center

Windows下的Source Insight是最强大的源代码阅读工具之一,但因为是收费软件,我也就不着重推荐了。


R语言-函数源代码查看

作为一个开源软件,R的一个非常大的优点就是我们可以随意查看所有算法的源代码,在对这些源代码进行分析的过程中不仅可以加深对算法的认识,而且可以大步提高对R语言的掌握程度。如果可以也能根据自己的需求,对算...
  • qq_35242986
  • qq_35242986
  • 2016年07月15日 11:04
  • 1859

[R语言实战].源代码.zip

  • 2012年01月03日 20:22
  • 28KB
  • 下载

R语言编译器

  • 2014年05月01日 20:44
  • 3.96MB
  • 下载

R学习笔记————编译器的安装

很少总结学习,总觉的有x
  • xiedongdongcumt
  • xiedongdongcumt
  • 2014年04月25日 21:40
  • 2109

R语言-函数源代码查看

作为一个开源软件,R的一个非常大的优点就是我们可以随意查看所有算法的源代码,在对这些源代码进行分析的过程中不仅可以加深对算法的认识,而且可以大步提高对R语言的掌握程度。如果可以也能根据自己的需求,对算...
  • qq_35242986
  • qq_35242986
  • 2016年07月15日 11:04
  • 1859

R语言将源码包编译为二进制文件

1、背景介绍 我们在安装R语言的packages时,有时会遇到包not available的情况。这是因为,该包没有提供windows安装所使用的二进制 文件。如果我们想要使用该包,则需要...
  • learneraiqi
  • learneraiqi
  • 2015年06月03日 12:25
  • 1910

R语言初学者经验

经验丰富的程序员通常会发现R语言的某些方面不太寻常。以下是这门语言中你需要了解的一些特性: 1、对象名称中的句点(.)没有特殊意义。但美元符号($)却有着和其他语言中的句点   类似的含义,即指...
  • hongweigg
  • hongweigg
  • 2015年05月06日 10:50
  • 12530

《R语言经典示例》学习笔记(一)

《R语言经典示例》笔记R入门和获取帮助 q() Esc中断正在运行的程序 help(functionname) 查看该函数的帮助文档 args(functionname) 快速获取函数的参...
  • duxu24
  • duxu24
  • 2016年04月26日 21:59
  • 814

查看R函数源代码

在学习R的过程中,当你能够顺利的使用一些R各个包提供给你的函数以后,是否会让你想看一看具体这个过程是如何实现的呢?       我属于这种抱有浓厚兴趣的人之一,而且我也知道在使用R时间稍微...
  • bangemantou
  • bangemantou
  • 2013年12月03日 16:02
  • 7057

R语言解析JSON格式数据文件

互联网数据分析,避免不了接触JSON格式的数据集,而对于R语言来做分析来说,很显然这种数据格式不适合分析。所以,对JSON个数据进行解析,使其符合我们分析时常用的数据集,如data.frame,lis...
  • learneraiqi
  • learneraiqi
  • 2015年05月19日 16:56
  • 6423
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:R语言源码解析
举报原因:
原因补充:

(最多只允许输入30个字)