时隔9年,R语言正式告别2.0时代,跨入3.0纪元
jopen 12年前
R 3.0.0 (代号 “Masked Marvel”)已经释出,R 正式进入了 3.x 时代。
R 3.0.0 带来了约 100 项的新特性,长向量的全面支持和若干项性能提升。长向量(Long Vectors)理论上至多可存储 2^52 个元素,已经远超 CPU 和操作系统地址空间限制。更多说明和代码迁移注意事项可以参考 ?LongVectors . 考虑到向量在 R 中的基础地位,这将给未来 R 对更大规模数据的支撑铺平道路。
另一项值得注意的重要变化是,程序包的 vignette 编译目前已经向 Sweave 以外的引擎开放,即正式引入了 knitr 支持!详情可参看最新版本的 Writing R Extensions 以及 tools::vignetteEngine 。
考虑到长向量特性比较重要,完整翻译了官方公告中的两个重点章节:
用户可见的显著变动:
- 对于此版本的 R (3.0.0),所有包都需要重新安装。
- 对长度为 2^31 以上向量的全面支持(仅限 64-bit 系统,32-bit 系统将会报错)
- 64-bit 版本的 R 可分配内存的大小仅受系统的限制。可通过系统工具(如 bash shell 下的 ulimit )来设置单个 R 进程的整体内存占用,尤其是在多用户环境下。有若干包需要 4GB 以上的虚拟内存来加载。
- 64-bit Windows 版本的 R 可用内存大小默认限制为已安装内存的大小。该值可通过启动参数 --max-mem-size 或环境变量 R_MAX_MEM_SIZE 设置。
- 使用负数表示颜色值的方式已被全面废弃,统一抛出错误。
长向量支持:
以下内容仅适用于 64-bit 系统:
- 全面支持多于 2^31 - 1 个元素的向量。适用于原始型、逻辑型、整数型、双精度型、复数型和字符型向量,对列表同理(列表是特殊的向量)。(字符向量的每一元素大小限制仍为 2^31 - 1 bytes)
- 对向量的多数操作可无缝应用于长向量,对于尚不支持的操作,可能会返回错误 'long vectors not supported yet' 多数是因为它们明确依赖于整数型下标(如 anyDuplicated() 和 match() )或是因为超过了其他的限制(如字符串或矩阵的维度)或相应的操作速度可能会极其缓慢。
- 对长向量使用 length() 将返回一个双精度值,且长度属性可以通过使用一个双精度值和赋值语句设置为 2^31 或更多。
- 下标索引的多数功能都可正常使用。总的来说,双精度值下标可用于访问超出 2^31 -1 的元素。
- 目前对于每维少于 2^31 个元素而总元素个数大于此值的矩阵和数组已经有部分支持。仅有某些矩阵代数的操作支持这样的矩阵,而且通常会花费很长时间。对于其余操作,尚不支持的原因可能是底层的 Fortran 代码有着某种未被声明的限制(如已在复数型 svd() 中发现的那样)。
- dist() 可计算得到大于 65536 行的距离对象 (但是像 hclust() 一样的函数尚不能处理这样的对象)。
- 对原始型向量进行 serialize() 不受向量大小的限制(除了受硬件资源所限)。
- C 函数 R_alloc 现在可以分配 2^35 bytes 或更多内存。
- agrep() 和 grep() 将针对输入的长向量返回双精度型的下标。
- 为了支持长向量,许多 .C() 调用都被替换为 .Call() 调用(已经替换或将替换)。遗憾的是有若干包复制了非正式 API 的 .C() 调用,因此会编译失败。
- .C() 和 .Fortran() 尚不支持长向量的输入。这是一个预警机制,因为现有代码基本不太可能是可以处理长向量的实现(同时 R 的封装也通常假设 length(x) 是一个整数)。
- sort() 中的多数方法都已支持长向量。
- rank(), sort.list() 和 order() 已支持长向量 (除了 radix sorting 会比较缓慢)。
- sample() 可对长向量做均匀抽样。
发布公告
https://stat.ethz.ch/pipermail/r-help/2013-April/350751.html
下载地址(源码包)
http://cran.r-project.org/src/base/R-3/R-3.0.0.tar.gz
来自: http://cos.name/cn/topic/109895