gpt4 book ai didi

r - 为什么 `row.names` 优于 `rownames` ?

转载 作者:行者123 更新时间:2023-12-03 10:29:14 26 4
gpt4 key购买 nike

R核心库中有两个函数。

  • row.names获取和设置数据框的行名
  • rownames检索或设置类似矩阵的对象的行名。

  • 但是 row.names 的文档指定对于数据框,“rownames”和“colnames”最终分别调用“row.names”和“names”,但首选后者。为什么是 row.names首选?忽略 row.names 不是更容易吗?只需调用 rownames ?

    最佳答案

    row.names()是 S3 通用函数,而 rownames()是一个较低级别的非泛型函数。 rownames()实际上是 row.names() 的默认方法在没有更具体的方法的情况下应用于任何对象。
    如果您正在对数据框进行操作 x , 那么使用 row.names(x) 效率更高因为有一个具体的row.names()数据帧的方法。 row.names()数据帧的方法只是提取 "row.names"已存储在 x 中的属性.相比之下,由于 rownames() 的定义以及函数之间的相互关系,rownames(x)必须提取 x 的所有维度名称,然后删除列名,然后与 names(x) 结合,然后删除 names(x)再次。这个过程甚至涉及到对 row.names(x) 的调用。作为中间步骤。这一切通常会发生得如此之快以至于您不会注意到它,但仅提取属性显然更有效。
    只使用通用版本 row.names() 是合乎逻辑的。一直以来,因为它总是调度适当的方法。
    使用rownames(x)没有实际的进步超过 row.names(x) .
    对于已定义 row.names 的对象类方法,然后 rownames(x)是错误的,因为它绕过了该方法。
    对于没有定义 row.names 方法的对象类,这两个函数是等价的,因为 row.names(x)只需调用rownames(x) .
    这两种功能存在的原因是历史性的。rownames()是较旧的函数,在引入泛型函数和方法之前是 R 语言的一部分。
    它仅用于矩阵,但它适用于任何具有 dimnames 的数据对象。属性。
    我个人使用rownames(x)x是一个矩阵,row.names(x)否则,但正如我所说,人们也可以使用 row.names(x)每时每刻。

    关于r - 为什么 `row.names` 优于 `rownames` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38466276/

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