Я хотів би регресувати вектор B проти кожного зі стовпців у матриці А. Це тривіально, якщо відсутні дані, але якщо матриця A містить відсутні значення, то моя регресія проти A обмежена, щоб включати лише рядки, де всі значення присутні ( поведінка na.omit за замовчуванням ). Це дає неправильні результати для стовпців, у яких відсутні дані. Я можу регресувати матрицю B стовпців проти окремих стовпців матриці A, але у мене є тисячі регресій, і це непомірно повільно і неелегантно. Функція na.exclude, здається, створена для цього випадку, але я не можу змусити її працювати. Що я тут роблю неправильно? Використовуючи R 2.13 на OSX, якщо це має значення.
A = matrix(1:20, nrow=10, ncol=2)
B = matrix(1:10, nrow=10, ncol=1)
dim(lm(A~B)$residuals)
# [1] 10 2 (the expected 10 residual values)
# Missing value in first column; now we have 9 residuals
A[1,1] = NA
dim(lm(A~B)$residuals)
#[1] 9 2 (the expected 9 residuals, given na.omit() is the default)
# Call lm with na.exclude; still have 9 residuals
dim(lm(A~B, na.action=na.exclude)$residuals)
#[1] 9 2 (was hoping to get a 10x2 matrix with a missing value here)
A.ex = na.exclude(A)
dim(lm(A.ex~B)$residuals)
# Throws an error because dim(A.ex)==9,2
#Error in model.frame.default(formula = A.ex ~ B, drop.unused.levels = TRUE) :
# variable lengths differ (found for 'B')