什么之间的区别[1],[1],[,1],[[1]]在R A数据帧? [重复](What'

2019-06-25 04:11发布

可能重复:
在R,就是用于访问列表的元素[]和[[]]符号之间的差异?

我很困惑与差[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]中使用的vector ,但为什么所有的人都在数据帧可用?

任何人可以解释这些用法区别?

Answer 1:

在R,运营商不被用于一个数据类型。 操作符可以重载为您喜欢的任何数据类型(例如也S3 / S4类)。

事实上,这对data.frames的情况。

  • 作为data.frames是列表中, [i][[i]]$ )显示列表的行为。

  • 排,科伦指数的确有表的直观含义,并data.frames看起来像表。 也许这就是为什么data.frame [I,J]方法进行定义的原因。

你甚至可以看一下定义,他们被编码在S3系统(因此methodname.class ):

> `[.data.frame`

> `[[.data.frame`

(反引号引用函数名,否则R.将尝试使用运营商,并与一个语法错误结束)



文章来源: What's the difference between [1], [1,], [,1], [[1]] for a dataframe in R? [duplicate]
标签: r statistics sas