R语言中括号[1]与双中括号[[1]]的差异?

 
#   获取操作符[[的帮助
?`[[`
相同点:

两者作用都是“提取”,当从一个向量或矩阵中提取第3个元素时,两者结果相同!

> aaa<-c(1,2,3,4,5)
> aaa[3]
[1] 3
> aaa[[3]]
[1] 3
不同点:

当数据不是一个list时,情况就不同了。
[] extracts a list, [[]] extracts elements within the list
The [[ form allows only a single element to be selected using integer or character indices, whereas [ allows indexing by vectors.

 
> alist <- list(c("a", "b", "c"), c(1,2,3,4), c(8e6, 5.2e9, -9.3e7))
> alist[[1]]
[1] "a" "b" "c"
> alist[1]
[[1]]
[1] "a" "b" "c"
看起来结果一样,但其实数据类型不一样的:
> str(alist[[1]])
 chr [1:3] "a" "b" "c"
> str(alist[1])
List of 1
 $ : chr [1:3] "a" "b" "c"

 另一个区别是 [[ 可通过参数“exact”激活模糊匹配,[]则不行。

#   定义list对象
li <- list(name='yiifaa', age=35)
#   从list提取元素一定要用[[]]
#   模糊匹配到name
li[['nam', exact=FALSE]]

R有三个基本的索引操作符,其语法由以下示例显示

    x[i]
    x[i, j]
    x[[i]]
    x[[i, j]]
    x$a
    x$"a"

对于向量和矩阵,[[表单很少使用,尽管它们与表单有一些细微的语义差异[(例如,它删除任何名称或dimnames属性,并且部分匹配用于字符索引)。使用单个索引索引多维结构时,x[[i]]或者x[i]将返回第ith个顺序元素x

对于列表,通常用于[[选择任何单个元素,而[返回所选元素的列表。

[[表单只允许使用整数或字符索引选择单个元素,而[允许通过向量进行索引。请注意,对于列表,索引可以是向量,向量的每个元素依次应用于列表,所选组件,该组件的选定组件等。结果仍然只是一个元素。

ref

https://www.jianshu.com/p/f41642cfb7e1

原文地址:https://www.cnblogs.com/emanlee/p/14920541.html