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

s16*_*210 5 r class typeof optional-parameters

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

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

f(1, 2, 3)
## Error in class(...) : 3 arguments passed to 'class' which requires 1
Run Code Online (Sandbox Code Playgroud)

现在报价

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

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

— 约翰·钱伯斯

在我的脑海里,我想知道:什么样的物体是...

小智 4

多么有趣的问题啊!

\n\n

点-点-点...是一个对象(约翰·钱伯斯是对的!),它是一种配对列表。嗯,我搜索了文档,所以我想与您分享:

\n\n

R语言定义文档说:

\n\n
\n

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

\n
\n\n

另一章详细定义了pairlists:

\n\n
\n

Pairlist 对象类似于 Lisp\xe2\x80\x99s 点对列表。

\n\n

R 语言中对列表的处理方式与通用向量 (\xe2\x80\x9clists\xe2\x80\x9d) 完全相同。

\n
\n\n

关于通用和点对的帮助说:

\n\n
\n

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

\n
\n\n

Stack Overflow上有一个很好的总结!

\n