如何解决R语言中dimnames不匹配及数据长度与行数不符的矩阵报错?
问题解析与解决
先搞懂两个报错/警告的原因
1. 警告信息:data length [92] is not a sub-multiple or multiple of the number of rows [24]
你要创建的是24行×4列的矩阵,总元素数应该是24×4=96,但你的datos只有92个元素,数量不匹配。R创建矩阵时要求数据长度必须是行数×列数的整数倍,否则会触发警告,这里因为差了4个元素,所以弹出这条提示。
2. 报错信息:length of 'dimnames' [1] not equal to array extent
dimnames=list(dias, horas)里,第一个元素对应行名,第二个对应列名。你设置了矩阵24行,所以行名长度必须是24,但dias只有4个元素;列名需要4个,但horas有24个,完全搞反了,这就是报错的核心原因。
具体解决方案
根据你的需求,有两种处理方式:
方案一:补全datos到96个元素,保持24×4的矩阵
如果需要保留24小时×4天的结构,把datos补到96个元素(比如补NA表示缺失值),同时修正行名和列名的顺序:
# 补4个NA到datos末尾,凑够96个元素 datos <- c(Mondays, Tuesdays, Wednesdays, Thursdays, rep(NA, 4)) dias <- c("Monday","Tuesday","Wednesday","Thursday") horas <- 0:23 # 行名是horas(24个),列名是dias(4个) days <- matrix(datos, nrow=24, ncol=4, dimnames=list(horas, dias)) days
方案二:调整矩阵维度,适配92个元素
如果不想补数据,92刚好是23×4,所以可以把行数改成23,同时修正行名范围:
dias <- c("Monday","Tuesday","Wednesday","Thursday") # 行名改成0到22,共23个 horas <- 0:22 days <- matrix(datos, nrow=23, ncol=4, dimnames=list(horas, dias)) days
额外提醒
创建矩阵时一定要注意:
- 数据总长度必须等于行数×列数,否则会触发警告或异常
dimnames的第一个列表元素对应行名,长度必须等于行数;第二个对应列名,长度必须等于列数
内容的提问来源于stack exchange,提问作者capital97
相关产品推荐
相关产品推荐

