什么是对象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=)
答案 0 :(得分:9)
formals(function(x) {})
?好吧,首先(?formals
中记录),formals(function(x) {})
会返回 pairlist :
is(formals(function(x){}))
# [1] "pairlist"
与 list 对象不同, pairlist 对象可以包含不包含值的命名元素 - 在构造具有可能的可选形式参数的函数时,这是一件非常好的事情。来自?pairlist
:
允许带有无值的标记参数,而'list'只是忽略它们。
要查看差异,请将创建了pairlists的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)。
当一个人试图通过索引一个pairlist的空值元素来获取它时,R的开发人员通过让R返回该元素的 name 而不是它的verbotten-for-public来阻止该尝试 - 查看值。 (当然,这是您问题中显示的名称对象)。
答案 1 :(得分:3)
这是name
或symbol
,请参阅?name
,例如:
is(as.name('a'))
#[1] "name" "language" "refObject"
与您的示例的唯一区别在于您无法使用as.name
创建一个空的。