R 神秘形式(函数(x){})$x
什么是对象R 神秘形式(函数(x){})$x,r,metaprogramming,R,Metaprogramming,什么是对象形式(函数(x){})$x 它可以在函数的形式中找到,绑定到没有默认值的参数 有没有其他方法来指代这个奇怪的物体?除了表示空函数参数外,它还有其他作用吗 以下是可以在控制台中检查的一些属性: > is(formals(function(x){})$x) [1] "name" "language" "refObject" > formals(function(x){})$x > as.character(formals(function(x){})$x)
形式(函数(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=)
它是一个
名称
或符号
,请参见?名称
,例如:
is(as.name('a'))
#[1] "name" "language" "refObject"
与您的示例唯一不同的是,您不能使用as.name
创建一个空的。背景:什么是formals(函数(x){})
?
首先(如?formals
中所述),formals(function(x){})
返回一个pairlist:
is(formals(function(x){}))
# [1] "pairlist"
与list对象不同,pairlist对象可以具有不包含值的命名元素——在构造可能具有可选形式参数的函数时,这是一件非常好的事情。从?pairlist
:
不允许使用没有值的标记参数,而“list”只会忽略它们
要查看差异,请将创建成对列表的alist()
与构建“普通旧”列表的list()
进行比较:
list(x=, y=2)
# Error in list(x = , y = 2) : argument 1 is empty
alist(x=, y=2)
# $x
#
# $y
# [1] 2
你的问题是:什么是形式(函数(x){})$x
?
现在来回答您关于形式(函数(x){})$x
是什么的问题。我的理解是,在某种意义上,它的真正价值是“空符号”。然而,您无法从R内部获得它,因为“空符号”是R的开发人员(很大程度上是通过设计)试图对R用户完全隐藏的对象。(关于空符号的有趣讨论,以及为什么要隐藏它,)
当一个人试图通过索引一个pairlist的空值元素来获取它时,R的开发人员通过让R返回元素的名称而不是它的verbotten作为公共查看值来挫败这种尝试。(当然,这是问题中显示的名称对象) 那么我必须问他妈的引号(expr=)是什么!相同(quote(expr=)、形式(function(x){}$x)==TRUE,但>是(quote(expr=))[1]“name”“language”“reObject”不知道我能比我解释得更好,特别是在上面的最后两段。
quote(expr=)
的实际值是空符号,但这是一个内部结构,用户不打算使用它。在第二个示例中,当您要求对其进行检查时,R会将长度为零的名称替换为占位符,因为R开发人员不希望向R最终用户公开空符号的实际结构/类/类型等。因此,您无法使用诸如is
,类
,类型
,str
等内容来检查实际的内部结构。哦,好吧,这是有意义的。我担心我对formals(函数(x…)的速记与空符号并不完全相同。因此,我想知道函数的哪些参数没有默认值。我可以将它们的值与“空符号”进行比较吗?或者我不应该这样做?