神秘的形式(function(x){})$ x

Fer*_*aft 7 r metaprogramming

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

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

有没有其他方法来引用这个奇怪的对象?除了表示空函数参数之外,它是否还有其他作用?

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

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

> as.character(formals(function(x){})$x)
[1] ""
Run Code Online (Sandbox Code Playgroud)

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

alist(,)[[1]]
bquote()
quote(expr=)
Run Code Online (Sandbox Code Playgroud)

Jos*_*ien 9

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

好吧,首先(并记录在案?formals),formals(function(x) {})返回一个pairlist:

is(formals(function(x){}))
# [1] "pairlist"
Run Code Online (Sandbox Code Playgroud)

列表对象不同,pairlist对象可以具有不包含值的命名元素 - 在构造具有可能的可选形式参数的函数时非常好.来自?pairlist:

允许使用没有值的标记参数,而'list'只是忽略它们.

为了看到差异,比较alist(),创建pairlists,list()构建'普通旧'列表:

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

alist(x=, y=2)
# $x
# 
# $y
# [1] 2
Run Code Online (Sandbox Code Playgroud)

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

现在问你的问题是什么formals(function(x) {})$x.我的理解在某种意义上说它的真正价值在于"空符号".但是,你不能从R内部得到它,因为"空符号"是R的开发人员 - 非常多的设计 - 试图完全隐藏R用户.(有关空符号的有趣讨论,以及为什么它保持隐藏,请参阅此处开始的线程).

当一个人试图通过索引一个pairlist 的空值元素来获取它时,R的开发人员通过让R返回元素的名称而不是其verbotten-for-public-viewing 来阻止尝试.(当然,这是您问题中显示的名称对象).