【问题标题】:Clarification in colnames function in RR中colnames函数的澄清
【发布时间】:2026-01-05 00:50:01
【问题描述】:

我是 R 新手,我想向专家咨询R 中的colnames 函数。使用该函数,我意识到如果用于矩阵对象的单列,它会提供NULL,但是对于矩阵对象的多于 1 列,它工作得非常好。为了说明,假设我有矩阵test

 >test<-matrix(0,ncol=4,nrow=5)
 >colnames(test)<-c("A","B","C","D")
 >colnames(test[,1]) or colnames(test[,c(1)]) gives output as NULL
NULL

而以下工作正常,

colnames(test[,c(1:2)])
[1] "A" "B"

我知道另一种方法是使用colnames(test)[c(1:2)]。在我收到NULL 的情况下,我是否在这里遗漏了一些东西。

【问题讨论】:

  • colnames(test[,1, drop=FALSE]) 将工作。看看?"["
  • 试试test[,1]test[,c(1:2)]你就会明白
  • @Sotos 谢谢你的帮助。

标签: r matrix


【解决方案1】:

如果您查看?colnames 的描述。你会看到它需要一个参数x,它是一个a matrix-like R object, with at least two dimensions for colnames.

当您调用colnames(test[,1]) 时,您将给colnames 一个一维向量。比较 class(test[,1])class(test[,c(1:2)])。向量没有列或行,因此没有列或行名称。您可以在向量中命名元素,但这绝对不等同于矩阵中的列名

提取单个(或多个)列名的最佳方法是从列名的完整向量中选择后面的列

colnames(test) # gives you all column names
colnames(test)[1] # gives you the column name 1
colnames(test)[c(1,2)] # gives you column names 1 and 2

这是否为您澄清了这个问题?

【讨论】:

  • 非常感谢您的澄清......它真的很有帮助。