R中的行名和列名

Meh*_*lar 50 r columnname rowname

以下函数对是否生成完全相同的结果?

对1)names()&colnames()

对2)rownames()&row.names()

Dir*_*tel 73

正如奥斯卡王尔德所说

一致性是缺乏想象力的最后避难所.

R更像是一种进化而非设计的语言,所以这些事情发生了.names()colnames()处理a data.framenames()不适用于矩阵:

R> DF <- data.frame(foo=1:3, bar=LETTERS[1:3])
R> names(DF)
[1] "foo" "bar"
R> colnames(DF)
[1] "foo" "bar"
R> M <- matrix(1:9, ncol=3, dimnames=list(1:3, c("alpha","beta","gamma")))
R> names(M)
NULL
R> colnames(M)
[1] "alpha" "beta"  "gamma"
R> 
Run Code Online (Sandbox Code Playgroud)

  • 艾默生说:"愚蠢的一致性是小脑袋的大人物,受到小政治家,哲学家和神职人员的崇拜.一致性,一个伟大的灵魂无所事事." (7认同)
  • 和拉里·沃尔说:"我知道这很奇怪,但它确实更容易写诗"http://groups.google.com/group/comp.lang.perl/msg/5b26830b9e52189e (4认同)
  • 数据类型之间存在差异. (2认同)
  • 赞成优秀使用优秀报价 (2认同)
  • @DirkEddelbuettel好程序员开玩笑!:-))但你没有纠正它的事实让我担心你不是在开玩笑?我想我们都知道在人类语言中这是不同的理解,因为"names()工作......和colnames()工作......". (2认同)

Sha*_*ane 8

只是为了扩展Dirk的例子:

将数据帧视为具有相等长度向量的列表是有帮助的.这可能是为什么names使用数据框而不是矩阵.

另一个有用的函数是dimnames返回每个维度的名称.您会注意到该rownames函数实际上只返回第一个元素dimnames.

关于rownamesrow.names:我无法区分,虽然rownames使用dimnameswhile row.names是在R之外写的.它们似乎也适用于更高维数组:

>a <- array(1:5, 1:4)
> a[1,,,]
> rownames(a) <- "a"
> row.names(a)
[1] "a"
> a
, , 1, 1    
  [,1] [,2]
a    1    2

> dimnames(a)
[[1]]
[1] "a"

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL
Run Code Online (Sandbox Code Playgroud)


Ric*_*ton 5

我认为使用colnamesrownames最有意义; 这就是原因.

使用names有几个缺点.你必须记住它意味着"列名",它只适用于数据框,所以你需要colnames在使用矩阵时调用.通过调用colnames,您只需要记住一个功能.最后,如果您查看代码colnames,您将看到names无论如何它都会调用数据框,因此输出是相同的.

rownamesrow.names返回数据框和矩阵的相同值; 我发现的唯一区别是,如果没有任何名称,rownames将打印"NULL"(如同colnames),但row.names无形地返回它.由于在这两个功能之间没有多少选择rownames,因此它以美学为基础获胜,因为它配对得更漂亮colnames.(另外,对于懒惰的程序员,你可以保存输入的字符.)