我被哈德利韦翰,在那里他指出,[(和+, - ,{等)读取预研被引入的功能,以使得[可以以这种方式如果`[`是R中子集的函数,']是什么?
> x <- list(1:3, 4:9, 10:12)
> sapply(x, "[", 2)
[1] 2 5 11
其是用于非常好,可以理解。但是,如果[是子集所需的功能]是否具有另一种用途而不是语法功能?
我发现:
> `]`
Error: object ']' not found
,所以我认为没有其他用途呢?
我被哈德利韦翰,在那里他指出,[(和+, - ,{等)读取预研被引入的功能,以使得[可以以这种方式如果`[`是R中子集的函数,']是什么?
> x <- list(1:3, 4:9, 10:12)
> sapply(x, "[", 2)
[1] 2 5 11
其是用于非常好,可以理解。但是,如果[是子集所需的功能]是否具有另一种用途而不是语法功能?
我发现:
> `]`
Error: object ']' not found
,所以我认为没有其他用途呢?
这是语法和语义之间的根本区别。语义要求 - 在R中 - 例如子集和if
等都是函数。这就是为什么R定义功能`[`
,`if`
等
然后有语法。并且R的语法规定if
的语法是if (condition) expression
或if (condition) expression else expression
。同样,R中子集的语法是obj[args…]
。也就是说,]
只是一个语法元素,它没有语义等价性,没有相应的功能(与else
相同)。
为了甚至更清楚使此:
[
和]
是R中的语法元素界定一个子集的表达。`[`
(注意反引号!)是一个函数,它实现了子集操作。不知何故,我期待]
是一个语法元素,默认情况下:从末尾索引。所以我定义它自己在我的代码:
"]" <- function(x,y) if (y <= length(x)) x[length(x)+1-y] else NA
在给定的例子,那么:
sapply(x, "]", 1)
[1] 3 9 12
sapply(x, "]", 2)
[1] 2 8 11
看起来有点像(但不相同)'尾巴'不确定我喜欢使用符号而不是表达式名称的函数。 –
另一种方式把它是']'用于由R的解析器能够识别在呼叫到'['结束。 – Benjamin
这就是我假设,但要清理上,因为上面这个例子中,以下引用放在几个行线:“要理解R中的计算,两个口号是有益的:存在 一切都是对象。出现这种情况 一切都是函数调用“ - 约翰·钱伯斯 – Xizam
啊,因此,这意味着]由本身是不是一个syntatical元素,只有在它是指原函数的结合[...],当'''[(反引号)? – Xizam