【问题标题】:What kind of object is `...`?`...`是什么样的对象?
【发布时间】:2020-10-03 12:34:28
【问题描述】:

我最近考虑了函数的... 参数,并注意到R 不允许检查对象的类。

f <- function(...) {
   class(...)
}

f(1, 2, 3)
## Error in class(...) : 3 arguments passed to 'class' which requires 1

现在加上报价

“要理解 R 中的计算,有两个口号很有帮助:

• 存在的一切都是对象。 • 发生的一切都是 函数调用。”

——约翰·钱伯斯

我在想:... 是什么对象?

【问题讨论】:

  • Section 1.5.2 of the R Internals manual 可能会有所帮助。它们是一种特殊类型的“pairlist”。 Section 1.1.1 告诉我们“配对列表在 R 级别很少见,但例如用于参数列表。”配对列表的其他内容是语言对象,例如公式。

标签: r class optional-parameters typeof


【解决方案1】:

多么有趣的问题!

Dot-dot-dot ... 是一个对象(John Chambers 是对的!),它是一种配对列表。好吧,我搜索了文档,所以我想与您分享:

R Language Definition 文件说:

“...”对象类型存储为配对列表类型。 “...”的组件可以从 C 代码以通常的配对列表方式访问,但在解释代码中作为对象不容易访问。可以将对象捕获为列表。

Another chapter 详细定义了pairlists:

Pairlist 对象类似于 Lisp 的点对列表。

对列表在 R 语言中的处理方式与通用向量(“列表”)完全相同。

帮助Generic and Dotted Pairs 说:

R 内部几乎所有列表都是通用向量,而传统的点对列表(如 LISP 中)仍然可用,但很少被用户看到(作为函数的形式除外)。

Stack Overflow 有一个很好的总结!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2012-01-05
    • 2020-02-11
    • 2022-08-11
    • 2020-12-23
    相关资源
    最近更新 更多