【问题标题】:What are primitive, internal, builtin, and special functions? [closed]什么是原始函数、内部函数、内置函数和特殊函数? [关闭]
【发布时间】:2017-03-28 07:09:30
【问题描述】:

我看到一些调用 C 代码的函数被描述为 primitiveinternalbuiltinspecial。这些功能是什么?

【问题讨论】:

    标签: r r-faq


    【解决方案1】:

    这个问题将两个不同的概念混为一谈。 specialbuiltin 是由typeof 确定的三种函数类型中的两种(以及closures)。

    来自R-ints, 1.5 Argument evaluation

    作为一个特殊的/内置的与原始的或 .Internal:quote 是一个特殊的原语,+ 是内置的 原始的, cbind 是一个特殊的 .Internal 和 grep 是一个内置 。内部的。

    内置与特殊

    如果函数调用 C 代码,内置/特殊是指在传递给 C 代码之前是否评估其参数。

    来自R-lang, 2.1.7 Builtin objects and special forms

    内置函数的所有参数都被评估和传递 到内部函数,按照按值调用, 而特殊函数将未计算的参数传递给 内部功能。

    内部与原始

    .Internal.Primitive指的是用来调用C代码的接口。内部是标准方法,因为您可以在调用 C 代码之前检查 R 代码中的参数。 Primitive 性能更高,但不允许在函数中使用任何 R 代码。

    来自R-ints, 2 .Internal vs .Primitive

    在构建时编译成 R 的 C 代码可以直接在 什么被称为原语或通过 .Internal 接口,其中 除了语法之外,它与 .External 接口非常相似。更多的 准确地说,R 维护了一个 R 函数名称表和 要调用的相应 C 函数,按照惯例,所有函数都开始 使用“do_”并返回 SEXP。此表(文件中的 R_FunTab src/main/names.c) 还指定函数的参数数量 是必需的还是允许的,无论论点是否是 在调用之前评估,以及函数是否为“内部” 从某种意义上说,它必须通过 .Internal 接口访问, 或直接可访问,在这种情况下,它在 R 中打印为 .原始的。

    使用 .Internal() 包裹在闭包中的函数通常是 首选,因为这确保了命名和默认的标准处理 论据。

    但是,出于方便和效率的原因(如 使用 .Internal 接口的一些开销 函数闭包),原始函数是异常,可以 可以直接访问。

    【讨论】:

    • 你写了很棒的 [r-faq] 帖子,但你为什么要让它们成为社区维基?您已经为此花费了大量的时间和精力,为什么要否认作为答案赞成票的一部分给予您的少量代表?或者你想向其他人发出信号,这是我写的,请继续改进它
    • @BhargavRao 是的,我希望其他人改进它!如果它被标记为r-faq,那么获得社区满意的答案很重要。我从其他答案中得到了很多分数。
    • 还有更多:一些原语在 R 中定义为函数,另一些直接定义为 .Primitive 对象。你能扩大差异吗?我尝试过寻找解释,并在 R 中进行实验,但不明白。例如,​`+`​ 被定义为 函数,而 ​`(`​return 不是(尽管可以调用)。
    • @KonradRudolph 这些东西就是函数。看看is.function(`(`)is.function(return)。不知道为什么他们的打印方法只是说.Primitive()
    • @RichieCotton 是的,这就是我所指的:它们当然是函数,但它们的 R 定义看起来不像函数。实际上是另一种方式:.Primitive(…) 返回一个函数。因此,我不明白(例如)c 是如何工作的:例如,如果我复制它的定义并将其分配给不同的变量,则结果不起作用:x = function(...) .Primitive("c"); x(1, 2) 返回.Primitive("c")。相比之下,如果我直接定义y = .Primitive("c"),它就可以工作。那么c 是做什么的呢?此外,xc 实际上在控制台中的打印方式略有不同。
    猜你喜欢
    • 2016-02-03
    • 2015-06-27
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 2011-01-17
    • 2014-07-07
    相关资源
    最近更新 更多