我看到的关于 R 的整数类型的一个常见评论是,它仅用于与 C 代码进行通信。R 文档的任何官方部分中是否出现过这样的声明?我经常发现自己制作向量integer(10)
的印象是它们对我的目的会更有效,只是为了记住这个民间传说并重新考虑我是否应该将整数用于从不尝试与 C 代码通信的代码。
2 回答
我不这么认为。这种民间传说可能来自这样一个事实,即 R 在键入和强制方面非常松散,因此很容易意外地得到一个浮点变量。
整数类型当然可以节省内存:
> object.size(seq(1e8))
400000048 bytes
> object.size(seq(1e8)+0.1)
800000048 bytes
我还没有尝试过基准测试来查看 R 是否使用更快的整数与浮点算术例程,但你可以。
我没有仔细查看所有R 的文档,但在R 语言定义中对“整数”的全文搜索中出现的唯一稍微相关的注释是:
在大多数情况下,整数和数值之间的差异并不重要,因为 R 在使用数字时会做正确的事情。然而,有时我们想显式地为常量创建一个整数值。我们可以通过调用函数
as.integer
或使用各种其他技术来做到这一点......
我在 R 源代码树grep integer *.texi
的doc/manual
目录中做了一个并且没有(快速浏览)注意到任何其他看起来相关的东西。
按照Ben Bolker 的建议,我查阅了七本 R 手册。除了Ben 的回答之外,我还发现了以下内容:
大多数情况下,用户不会担心数字向量中的“数字”是整数、实数还是复数。如果输入数据很复杂,则内部计算以双精度实数或双精度复数形式完成。
R 简介第 2.2 节
编写 R 扩展为使 R 与 C 和 Fortran 通信提供了很多指导,但它没有说明整数类型的意图。
最后要检查的地方是完整参考手册。这样做你一定很生气——“整数”这个词出现了 1000 多次。但是,快速查看索引会发现整数类的文档。这给了我们答案是如此简单的英语,我不应该因为错过它而被原谅:
存在整数向量,以便可以将数据传递给期望它们的 C 或 Fortran 代码,从而可以准确而紧凑地表示(小)整数数据。