什么';R中数据帧的[1]、[1,]、[,1]、[1]]之间的差异是多少?

什么';R中数据帧的[1]、[1,]、[,1]、[1]]之间的差异是多少?,r,statistics,sas,R,Statistics,Sas,可能重复: 我对数据帧类型的[1]、[1,]、[1]、[1]、[1]]的区别感到困惑 我知道,[1,]将获取矩阵的第一行,[1]将获取第一列。[[1]]将获取列表的第一个元素 但是我检查了data.frame的文档,它说 数据框是具有相同行数的变量列表 唯一行名称 然后我输入一些代码来测试使用情况 >L3 <- LETTERS[1:3] >(d <- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, replace=TR

可能重复:

我对数据帧类型的[1]、[1,]、[1]、[1]、[1]]的区别感到困惑

我知道,[1,]将获取
矩阵的第一行,[1]将获取第一列。[[1]]将获取
列表的第一个元素

但是我检查了
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
>L3(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
1c
>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]只用于
矩阵
,[[1]]只用于
列表
,[1]用于
向量
,但为什么它们都可以在数据帧中使用呢


有人能解释一下这些用法的不同吗?

在R中,运算符不只是用于一种数据类型。运算符可以重载任何您喜欢的数据类型(例如S3/S4类)

事实上,data.frames就是这样

  • 由于data.frames是列表,
    [i]
    [[i]]
    (和
    $
    )显示类似列表的行为

  • 行、列索引对表有直观的意义,data.frame看起来像表。这可能就是定义data.frame[i,j]方法的原因

您甚至可以查看定义,它们是在S3系统中编码的(因此
methodname.class
):


(反勾号引用函数名,否则R将尝试使用运算符并最终导致语法错误)

在R中,运算符不能仅用于一种数据类型。可以为您喜欢的任何数据类型重载运算符(例如S3/S4类)

事实上,data.frames就是这样

  • 由于data.frames是列表,
    [i]
    [[i]]
    (和
    $
    )显示类似列表的行为

  • 行、列索引对表有直观的意义,data.frame看起来像表。这可能就是定义data.frame[i,j]方法的原因

您甚至可以查看定义,它们是在S3系统中编码的(因此
methodname.class
):


(反勾号引用函数名,否则R将尝试使用运算符并导致语法错误)

实际上[[]]也可以用于数据帧实际上[[]]也可以用于数据帧
> `[.data.frame`
> `[[.data.frame`