rep 的文档是否告诉我们它是一个内部通用函数?

问题描述

因为它在 the list of Internal Generic Functions 上,所以我知道 rep一个内部通用函数。这个事实是否可以通过仅读取 the documentation for rep 得出?我找到了以下两个相关的部分:

rep 复制 x 中的值。它是一个泛型函数,这里描述了(内部)方法

对于内部方法,这些可以包括

是否有任何一个明确告诉读者rep一个内部泛型函数

为了完全清楚,我问的是这些摘录中使用的术语。我不是 R 术语的专家,所以我要问的是他们使用的词所隐含的含义。例如,如果 R 文档说一个函数“是通用的”并且有一个“内部方法”,这是否意味着该函数因此是一个内部通用函数

指向某种 R 术语表或其中一本 R 手册中的相关部分的链接将是一个好的答案的一个非常重要的组成部分。简单的“是”或“否”可能还不够。

解决方法

首先,我认为您会受益于以下资源(15.7 通用函数面向对象https://homerhanumat.github.io/r-notes/generic-function-oo.html)。

其次,一些定义(摘自https://homerhanumat.github.io/r-notes/glossary-12.htmlhttps://colinfay.me/r-internals/internal-vs-primitive.html):

通用函数:“根据输入的类,将输入对象分派给多个方法函数之一的函数”。

Generic-Function OO:“一种面向对象的编程,其中任务由通用函数执行。用于执行特定任务的方法由输入对象的类决定” .

原语和内部函数:“在构建时编译成 R 的 C 代码可以直接在所谓的原语中调用,或者通过 .Internal 接口调用,除了语法之外,它与 .External 界面非常相似。

因此,我们可以说:

内部通用函数:通用的原始函数和内部函数(例如,根据输入的类将输入对象分派给多个方法函数之一的函数)。 >

现在,回答您的问题:

a) 文档是否清晰?

“它是一个通用函数,这里描述了(内部)默认方法”。它明确指出 rep 是一个通用函数。 “(内部)”类型的一瞥,它是一个内部/原始功能。内部的括号需要什么?我其实不知道。如果它声明:“rep 属于内部泛型函数的类别(请参阅 InternalMethods),那么它肯定会更清楚。这里描述了默认方法的详细信息”。但是,对于 rep.intrep_len,它更清晰一些(“在内部,它们是通用的”)。编写好的文档总是很困难!

b) 如何凭经验判断一个函数是否是内部泛型

依赖文档并不总能保证成功。对于 CRAN 提供的大量 R 包来说,这当然是正确的。但是,这个主题不仅仅是一个随机的 R 包,而是低级 R 编程语言。阅读rep的源代码你,我们可以确认rep是一个原始函数:

> rep
function (x,...)  .Primitive("rep")

通过运行以下命令,我们可以确认 rep 是一个通用函数:

> methods(rep)
[1] rep.bibentry*       rep.Date            rep.factor          rep.numeric_version rep.POSIXct        
[6] rep.POSIXlt         rep.roman*

因此,rep 必须是内部泛型函数。只是为了提供负控制(非通用函数的方法输出),请参见下文:

> methods(diag)
no methods found

c) R-CRAN 资源

最后,CRAN 在编译 R 编程语言的定义方面做得非常出色 (cran.r-project.org/doc/manuals/r-release/R-lang.html);关于“5 面向对象编程”一节有更多信息。但是上面提供的资源更具说教性。 CRAN 提供了一些您可能感兴趣的手册 (cran.r-project.org/manuals.html)。