在R中,我注意到function操作符的解析树似乎是多余的,因为它的第四个元素似乎总是由前三个元素组成。
例如,
> as.list(substitute(function(x = 1){x^2}))
[[1]]
`function`
[[2]]
[[2]]$x
[1] 1
[[3]]
{
x^2
}
[[4]]
function(x = 1){x^2}我注意到的一件事是,第四个元素确实存储了函数的输入格式。
> as.list(substitute(function(x = 1){
+ x^2})[[4]]
function(x = 1){
x^2}解析树中第四个元素的用途是什么?我唯一可以看到它被使用的时候是,如果你想逐字打印一个函数,你已经可以通过打印函数来做到这一点,例如
> f = function(x = 1){
+ x^2}
> f
function(x = 1){
x^2}发布于 2013-06-12 20:47:11
一些额外的注意事项:
1)可以使用options(keep.source=FALSE) (默认为TRUE)禁用此功能:
> as.list(substitute(function(x = 1){x^2}))
[[1]]
`function`
[[2]]
[[2]]$x
[1] 1
[[3]]
{
x^2
}
[[4]]
NULL在这个list中,第一个元素是标识闭包对象的符号,第二个元素保存formals,第三个元素保存body。请注意,最后一个是以“标准”方式打印的。第四个元素将保存键入的输入文本。
2)如果您在控制台输入function(x = 1){x^2},R将调用print.function,后者接受useSource参数。这在默认情况下是TRUE,并导致R简单地重复解析列表的第四个元素中存储的内容。将其设置为FALSE将强制R打印函数body
> options(keep.source=TRUE)
> f <- function(x = 1){x^2}
> f
function(x = 1){x^2}
> print.function(f)
function(x = 1){x^2}
> print.function(f, useSource=FALSE)
function (x = 1)
{
x^2
}https://stackoverflow.com/questions/17053765
复制相似问题