我正在阅读Hadley Wickham的高级R介绍,他说[(和+, - ,{等)是函数,所以[可以这样使用
> x <- list(1:3, 4:9, 10:12)
> sapply(x, "[", 2)
[1] 2 5 11
这是完全可以理解的。但是,如果[是子集所需的函数,是否]有另一种用法而不是语法的用途?
我发现:
> `]`
Error: object ']' not found
所以我假设它没有其他用途吗?
答案 0 :(得分:10)
这是语法和语义之间的根本区别。语义要求 - 在R中 - 像子集和if
之类的东西是函数。这就是R定义函数`[`
,`if`
等等的原因。
然后是语法。 R的语法规定if
的语法是if (condition) expression
或if (condition) expression else expression
。同样,R中的子集化语法为obj[args…]
。也就是说,]
只是一个句法元素,它没有语义等价,没有相应的功能(与else
相同)。
要使这一点更清晰:
[
和]
是R中用于分隔子集表达式的语法元素。`[`
(注意反引号!)是一个实现子集化操作的函数。答案 1 :(得分:0)
不知怎的,我希望]
默认是一个语法元素:从结尾索引。所以我在我的代码中自己定义它:
"]" <- 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