【问题标题】:Does the documentation or language definition for R remark on the intended usage of R's integers?R 的文档或语言定义是否说明了 R 整数的预期用途?
【发布时间】:2021-02-21 00:15:20
【问题描述】:

我看到的关于 R 的整数类型的一个常见评论是,它仅用于与 C 代码进行通信。 R 文档的任何官方部分中是否出现过这样的声明?我经常发现自己制作像integer(10) 这样的向量,以为它们对我的目的更有效,只是为了记住这个民间传说并重新考虑我是否应该将整数用于从不尝试与 C 代码通信的代码。

【问题讨论】:

  • R 文档是here,尽管如果您获得整个源代码树(通过下载源代码压缩包或从 SVN 存储库检出副本),一次搜索所有内容会更容易
  • @Henrik 啊,您说的是“存在整数向量,以便可以将数据传递给期望它们的 C 或 Fortran 代码,从而可以表示(小)整数数据准确而紧凑。”在?integer?是的,我是个傻瓜,错过了这一点。

标签: r integer cinterop


【解决方案1】:

我不这么认为。这个民间传说可能来自这样一个事实,即 R 在键入和强制方面非常松散,因此很容易意外地得到一个浮点变量。

整数类型肯定会节省内存:

> object.size(seq(1e8))
400000048 bytes
> object.size(seq(1e8)+0.1)
800000048 bytes

我还没有尝试过基准测试来查看 R 是否使用更快的例程进行整数和浮点运算,但你可以。

我没有仔细查看所有 R 的文档,但在R language definition 中对“整数”进行全文搜索时出现的唯一稍微相关的评论是: p>

在大多数情况下,整数和数值之间的差异并不重要,因为 R 在使用数字时会做正确的事情。然而,有时我们想显式地为常量创建一个整数值。我们可以通过调用函数as.integer 或使用各​​种其他技术来做到这一点...

我在 R 源代码树的 doc/manual 目录中创建了 grep integer *.texi,但没有(快速浏览)注意到任何其他看起来相关的内容。

【讨论】:

    【解决方案2】:

    按照Ben Bolker's 的建议,我检查了seven R manuals。除了Ben's answer,我还发现了以下内容:

    在大多数情况下,用户不会担心数字向量中的“数字”是整数、实数还是复数。如果输入数据很复杂,则内部计算以双精度实数或双精度复数的形式完成。
    An Introduction to R Section 2.2

    Writing R Extensions 为使 R 与 C 和 Fortran 通信提供了很多指导,但没有说明整数类型的意图。

    最后检查的地方是Full Reference Manual。这样做你一定很生气——“整数”这个词出现了 1000 多次。但是,快速查看索引会发现the documentation for the integer class。这给了我们答案是如此简单的英语,我不应该因为错过它而被原谅:

    整数向量的存在是为了将数据传递给需要它们的 C 或 Fortran 代码,从而可以准确而紧凑地表示(小)整数数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多