Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 神秘形式(函数(x){})$x_R_Metaprogramming - Fatal编程技术网

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…)的速记与空符号并不完全相同。因此,我想知道函数的哪些参数没有默认值。我可以将它们的值与“空符号”进行比较吗?或者我不应该这样做?