使用sweep()函数时出现数组维度报错的技术咨询
问题解决:sweep()处理矩阵列报错的修复
首先是生成矩阵的代码:
A <- matrix(c(1:9), nrow = 3) a <- c(1:8) b <- seq(1, 7, length.out = 8) c <- rep(c(1,2), each=2, times=2) B <- cbind(a, b, c) C <- rbind(A, B)
执行以下代码时出现报错:
C[,ncol(C)] <- sweep(C[,ncol(C)], 2, 2, `*`)
报错信息翻译
错误信息:
array(STATS, dims[perm])出错:‘dims’的长度不能为0
错误原因
提取矩阵最后一列C[,ncol(C)]时,R默认会将其降维为一维向量,而sweep()函数需要处理的是带有维度属性的数组或矩阵。向量没有维度信息(维度长度为0),因此触发了该错误。
修复方案
方案一:保留列的矩阵维度
使用drop=FALSE参数,让提取的列保持矩阵结构,这样sweep()就能正常工作:
C[,ncol(C), drop=FALSE] <- sweep(C[,ncol(C), drop=FALSE], 2, 2, `*`)
方案二:直接向量乘法(更简洁)
其实不需要用sweep(),直接对提取的列向量做乘法操作即可,代码更简单高效:
C[,ncol(C)] <- C[,ncol(C)] * 2
内容的提问来源于stack exchange,提问作者cccbc
相关产品推荐
相关产品推荐

