可能重复:
In R, what is the difference between the [] and [[]] notations for accessing the elements of a list?
我对数据帧类型的[1],[1,],[,1],[[1]]的区别感到困惑。
据我所知,[1,]将获取matrix
的第一行,[,1]将获取第一列。 [[1]]将获取list
的第一个元素。
但我检查了data.frame
的文件,其中说的是
数据框是具有相同行数的变量列表 唯一的行名称
然后我输入了一些代码来测试用法。
>L3 <- LETTERS[1:3]
>(d <- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, replace=TRUE)))
x y fac
1 1 1 C
2 1 2 B
3 1 3 C
4 1 4 C
5 1 5 A
6 1 6 B
7 1 7 C
8 1 8 A
9 1 9 A
10 1 10 A
> d[1]
x
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
>d[1,]
x y fac
1 1 1 C
>d[,1]
[1] 1 1 1 1 1 1 1 1 1 1
>d[[1]]
[1] 1 1 1 1 1 1 1 1 1 1
令我困惑的是:[1,]和[,1]仅用于matrix
。 [[1]]仅用于list
,[1]}中使用[1],但为什么所有数据都可用于数据框?
有人可以解释这些用法的区别吗?
答案 0 :(得分:4)
在R中,运算符不用于仅的一种数据类型。对于您喜欢的任何数据类型,操作符都可以重载(例如S3 / S4类)。
事实上,data.frames就属于这种情况。
由于data.frames是列表,[i]
和[[i]]
(以及$
)会显示类似列表的行为。
行,列表索引对表有直观的意义,而data.frames看起来像表。可能这就是为什么定义data.frame [i,j]的方法的原因。
您甚至可以查看定义,它们在S3系统中编码(所以methodname.class
):
> `[.data.frame`
和
> `[[.data.frame`
(反引号引用函数名称,否则R将尝试使用运算符并最终出现语法错误)