set.seed(1) df <- data.frame(y=rnorm(100),batch=sample(1:3,100,replace = T),phase=sample(c("A","B","C"),100,replace = T)) df$batch <- factor(df$batch) df$phase <- factor(df$phase) df$phase[sample(1:100,10,replace = F)] <- NA X <- model.matrix(lm(formula = as.formula("y ~ batch + phase"),data = df),na.action='na.pass') Error in .lm.fit(y = df$y, x = X) : NA/NaN/Inf in 'x' .lm.fit(y=df$y,x=X,na.action='na.exclude') Error in .lm.fit(y = df$y, x = X, na.action = "na.exclude") : unused argument (na.action = "na.exclude")