首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中函数解析树的冗余性

R中函数解析树的冗余性
EN

Stack Overflow用户
提问于 2013-06-12 05:02:53
回答 2查看 174关注 0票数 5

在R中,我注意到function操作符的解析树似乎是多余的,因为它的第四个元素似乎总是由前三个元素组成。

例如,

代码语言:javascript
运行
复制
> as.list(substitute(function(x = 1){x^2}))
[[1]]
`function`

[[2]]
[[2]]$x
[1] 1


[[3]]
{
    x^2
}

[[4]]
function(x = 1){x^2}

我注意到的一件事是,第四个元素确实存储了函数的输入格式。

代码语言:javascript
运行
复制
> as.list(substitute(function(x = 1){
+ x^2})[[4]]
function(x = 1){
x^2}

解析树中第四个元素的用途是什么?我唯一可以看到它被使用的时候是,如果你想逐字打印一个函数,你已经可以通过打印函数来做到这一点,例如

代码语言:javascript
运行
复制
> f = function(x = 1){
+ x^2}
> f
function(x = 1){
x^2}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-12 08:07:37

显然,这个组件是一个源引用:在R language definition中很难找到它,但它的目的正是为了保留原始源的结构,特别是注释;例如

代码语言:javascript
运行
复制
s <- substitute(function(x=1){ 
      ## a comment
       x^2})
str(s[[4]])
##  Class 'srcref'  atomic [1:8] 1 21 2 15 21 15 1 2
##   ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x8a87634>

显示它是一个srcref对象。神秘的数字(1,21,2,15,...)表示表示源代码的低级对象的索引,如?srcfile页面(即c(first_line, first_byte, last_line, last_byte, first_column, last_column, first_parsed, last_parsed))中所述。正如@SimonO101指出的那样,有一个R Journal article by Duncan Murdoch可能给出了最好的解释。

票数 5
EN

Stack Overflow用户

发布于 2013-06-12 20:47:11

一些额外的注意事项:

1)可以使用options(keep.source=FALSE) (默认为TRUE)禁用此功能:

代码语言:javascript
运行
复制
> 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

代码语言:javascript
运行
复制
> 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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17053765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档