R语言不使用colnames()函数为矩阵设置列名的方法
不使用colnames()和cbind()为矩阵设置列名的实现方法
你可以通过直接操作矩阵的dimnames属性实现需求,以下是3种符合要求的实现方式:
方法1:直接为dimnames属性赋值
colnames()函数的本质是修改dimnames属性列表的第二个元素,你可以跳过colnames()直接赋值:
# 原有生成矩阵的代码 player <- c(rep('dark',5),rep('light',5)) piece <-c('king','queen','pawn','pawn','knight','bishop','king','rook','pawn','pawn') matrix2 <- c(player, piece) dim(matrix2) <- c(10, 2) # 直接设置dimnames,无需调用colnames() # dimnames接收长度为2的列表,第一个元素对应行名(不需要就设为NULL),第二个对应列名 dimnames(matrix2) <- list(NULL, c("player", "piece"))
方法2:生成矩阵时直接通过matrix()的参数指定列名
你可以不用先拼接向量再设置维度,直接调用matrix()生成对象时通过dimnames参数一步指定列名:
player <- c(rep('dark',5),rep('light',5)) piece <-c('king','queen','pawn','pawn','knight','bishop','king','rook','pawn','pawn') matrix2 <- matrix( data = c(player, piece), nrow = 10, ncol = 2, dimnames = list(NULL, c("player", "piece")) )
方法3:通过structure()函数绑定属性
你也可以用structure()函数在生成矩阵的同时绑定列名属性:
player <- c(rep('dark',5),rep('light',5)) piece <-c('king','queen','pawn','pawn','knight','bishop','king','rook','pawn','pawn') matrix2 <- structure( c(player, piece), dim = c(10, 2), dimnames = list(NULL, c("player", "piece")) )
补充说明:以上方法底层逻辑和调用colnames()一致,都是修改矩阵的属性值,只是没有显式调用colnames()函数,完全符合你的需求。
内容的提问来源于stack exchange,提问作者NoviceCoder
相关产品推荐
相关产品推荐

