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]
将返回第i
th个顺序元素x
。对于列表,通常用于
[[
选择任何单个元素,而[
返回所选元素的列表。该
[[
表单只允许使用整数或字符索引选择单个元素,而[
允许通过向量进行索引。请注意,对于列表,索引可以是向量,向量的每个元素依次应用于列表,所选组件,该组件的选定组件等。结果仍然只是一个元素。
ref
https://www.jianshu.com/p/f41642cfb7e1