R中出现Use c() or as.vector() instead警告的原因及解决方法
R代码数组回收警告原因及修复方案
警告原因
- 你通过矩阵乘法
%*%计算得到的alpha虽然数值上是单个标量,但它的变量类型是1×1的矩阵(数组),而非普通的长度为1的向量。 - 执行
alpha * i运算时,R默认会把长度为1的数组自动回收为和i(长度为4的向量)一致的长度完成计算,这种1维数组的自动回收逻辑已被R官方弃用,因此触发警告。该警告现阶段不会影响运算结果,但后续R版本可能不再兼容该隐式回收逻辑。
修复方案
只需要将alpha显式转换为普通标量向量即可消除警告,两种等价写法二选一:
- 计算
alpha时直接转换类型:
alpha <- as.vector( ( t(i) %*% solve(f) %*% mu7) / (t(i) %*% solve(f) %*% i) )
- 计算
xstar7时转换alpha类型:
xstar7 <- (1 / labmda7) * solve(f) %*% (mu7 - as.vector(alpha) * i )
你也可以用c(alpha)替换上述代码中的as.vector(alpha),二者效果完全相同。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

