gpt4 book ai didi

r - 如何调用 `function`函数?

转载 作者:行者123 更新时间:2023-12-03 03:30:12 25 4
gpt4 key购买 nike

我正在尝试调用函数`function`来定义R代码中的函数。

众所周知™️,`function`是一个 .Primitive,当用户使用 R 时,R 在内部使用它来定义函数常规语法,即

mean1 = function (x, ...) base::mean(x, ...)

但是没有什么可以阻止我直接调用该原语。 或者我是这么认为的。我可以直接调用其他原语(甚至重新定义它们;例如,在疯狂的时刻 I overrode R’s builtin `for` )。所以这原则上是可能的。

但是我无法让它为 `function` 工作。这是我尝试过的:

# Works
mean2 = as.function(c(formals(mean), quote(mean(x, ...))))

# Works
mean3 = eval(call('function', formals(mean), quote(mean(x, ...))))

# Error: invalid formal argument list for "function"
mean4 = `function`(formals(mean), quote(mean(x, ...)))

事实上,mean3 尤其有效,这表明 mean4 应该 有效。但事实并非如此。为什么?

我检查了 R 源代码中 `function` 原语的定义。 do_function is defined in eval.c 。我看到它调用 CheckFormals ,这确保每个参数都是一个符号,但这会失败。但为什么要检查这个,这意味着什么?

最重要的是:有没有办法直接调用 `function` 原语?

<小时/>

只是澄清一下:有一些简单的解决方法(这个问题列出了两个,并且至少有第三个)。但我想了解这是如何(不)工作的。

最佳答案

这是因为 function 是一个特殊的原语:

typeof(`function`)
#> [1] "special"

参数没有被求值,因此您实际上传递了 quote(formals(mean)) 而不是 formals(mean) 的值。我认为没有一种方法可以在没有评估技巧的情况下直接调用 function ,除非使用一个空的形式列表,它只是 NULL

关于r - 如何调用 `function`函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54596743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com