什么是对象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返回该元素的名称而不是它的公共查看值来挫败这一尝试。 (当然,这是问题中显示的名称对象)。