gpt4 book ai didi

r - R中数据帧的[1],[1,],[,1],[[1]]有什么区别?

转载 作者:行者123 更新时间:2023-12-04 18:19:56 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




10年前关闭。




Possible Duplicate:
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 的文档,上面写着

A data frame is a list of variables of the same number of rows with unique row names



然后我输入了一些代码来测试用法。
>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 中,但为什么它们都在数据帧中可用?

有人可以解释这些用法的区别吗?

最佳答案

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

事实上,data.frames 就是这种情况。

  • 由于 data.frames 是列表,[i][[i]] (和 $ )显示类似列表的行为。
  • 行、列索引对于表格确实有直观的含义,而 data.frames 看起来像表格。可能这就是为什么定义 data.frame [i, j] 的方法的原因。

  • 您甚至可以查看定义,它们是在 S3 系统中编码的(所以 methodname.class ):
    > `[.data.frame`


    > `[[.data.frame`

    (反引号引用函数名,否则 R 会尝试使用运算符并最终出现语法错误)

    关于r - R中数据帧的[1],[1,],[,1],[[1]]有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875511/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com