gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:51:50 24 4
gpt4 key购买 nike

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

众所周知™️, `function`.Primitive当用户使用常规语法时,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应该管用。但事实并非如此。为什么?

我检查了 `function` 的定义R 源代码中的原语。 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/53218422/

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