`...是什么样的对象?

问题描述 投票:5回答:1

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

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

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

现在加引号

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

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

—约翰·钱伯斯

在我的脑海中,我想知道:...是哪种物体?

r class optional-parameters typeof
1个回答
2
投票

一个有趣的问题!

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

R Language Definition文件说:

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

[Another chapter详细定义配对列表:

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

对列表使用R语言的方式与通用矢量(“列表”)完全相同。

Generic and Dotted Pairs的帮助上说:

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

[这里有一个不错的摘要,位于Stack Overflow

© www.soinside.com 2019 - 2024. All rights reserved.