8

对象是什么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=)
4

2 回答 2

10

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

好吧,首先(并且如 中所述?formals),formals(function(x) {})返回一个pairlist

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

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

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

要查看差异,请使用 comparealist()来创建对列表,并使用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 用户隐藏的对象。(有关空符号的有趣讨论,以及为什么它被隐藏,请参阅从这里开始的线程)。

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

于 2013-05-24T17:46:57.433 回答
3

它是nameor symbol,请参见?name,例如:

is(as.name('a'))
#[1] "name"      "language"  "refObject"

与您的示例的唯一区别是您不能as.name用来创建一个空的。

于 2013-05-24T17:38:10.847 回答