如果 `[` 是 R 中的子集函数,那么 `]` 是什么?
If `[` is a function for subsetting in R, what is `]`?
我正在阅读 Hadley Wickham 的高级 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
我正在阅读 Hadley Wickham 的高级 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