这是一个通过 mapply 作为开始的非鲁棒替代解决方案(如果矩阵中的一个不完整则有效)。但是,我也认为 if () else 没有害处。
MatW <- matrix(rnorm(16),nrow=4)
MatY <- matrix(rnorm(16),nrow=4)
MatZ <- matrix(rnorm(16),nrow=4)
MatW[ , 3] <- NA
is.na(MatW[ ,3]) # True
lm.help2 <- function (x, y, z){
if (is.na(all(x))) lm(z ~ y)[1] else lm(z ~ x + y)[1]}
mapply(lm.help2,
split(MatW, col(MatW)), split(MatY, row(MatY)), split(MatZ, row(MatZ)))
# $`1.coefficients`
# (Intercept) x y
# 0.5736469 -0.4142749 -0.6161875
#
# $`2.coefficients`
# (Intercept) x y
# -0.3755538 0.1491310 -1.0966652
#
# $`3.coefficients`
# (Intercept) y # Only 1 variable in regression equation!
# 0.6374279 -0.8962027
#
# $`4.coefficients`
# (Intercept) x y
# -1.1016562 -0.7240938 -0.5976613