什么是对象formals(function(x){})$x

它可以在函数的形式中找到,绑定到没有默认值的参数。

还有其他方法可以引用这个奇怪的对象吗?除了代表空的函数参数外,它还有其他作用吗?

以下是可以在控制台中检查的一些属性:

> is(formals(function(x){})$x)
[1] "name"      "language"  "refObject"
> formals(function(x){})$x

> as.character(formals(function(x){})$x)
[1] ""


编辑:这是获取此对象的其他一些方法:

alist(,)[[1]]
bquote()
quote(expr=)

最佳答案

背景:什么是formals(function(x) {})

好吧,首先(如?formals中所述),formals(function(x) {})返回一个配对列表:

is(formals(function(x){}))
# [1] "pairlist"


与列表对象不同,对列表对象可以具有不包含任何值的命名元素-在构造具有可能为可选的形式参数的函数时,这是一件非常好的事情。来自?pairlist


允许使用没有值的带标签的参数,而“列表”只是忽略它们。


要了解差异,将创建对表的alist()与构造“普通旧”列表的list()进行比较:

list(x=, y=2)
# Error in list(x = , y = 2) : argument 1 is empty

alist(x=, y=2)
# $x
#
# $y
# [1] 2


您的问题:什么是formals(function(x) {})$x

现在是关于formals(function(x) {})$x是什么的问题。我的理解是,从某种意义上说,它的真正价值是“空符号”。但是,您无法从R内部获得它,因为“空符号”是R的开发人员(非常有意设计)试图完全向R用户隐藏的对象。 (要对空符号及其为何保持隐藏状态进行有趣的讨论,请see the thread starting here)。

当尝试通过索引成对列表中一个空值元素来达到此目的时,R的开发人员通过让R返回该元素的名称而不是它的公共查看值来挫败这一尝试。 (当然,这是问题中显示的名称对象)。

08-19 20:31