model.matrix expands a formula into the numeric columns that modeling functions use internally.

Program

Play the script to shift a numeric predictor and inspect the final design-row values.

model_matrix.R
samples <- data.frame(group = factor(c("A", "B", "A")), dose = c(1, 2, 3))
dose_shift <- 
samples$dose <- samples$dose + dose_shift
design <- model.matrix(~ group + dose, data = samples)
last <- paste(colnames(design), design[3, ], sep = "=", collapse = "; ")
cat(last, "\n", sep = "")
samples <- data.frame(group = factor(c("A", "B", "A")), dose = c(1, 2, 3))
dose_shift <- 
samples$dose <- samples$dose + dose_shift
design <- model.matrix(~ group + dose, data = samples)
last <- paste(colnames(design), design[3, ], sep = "=", collapse = "; ")
cat(last, "\n", sep = "")
samples <- data.frame(group = factor(c("A", "B", "A")), dose = c(1, 2, 3))
dose_shift <- 
samples$dose <- samples$dose + dose_shift
design <- model.matrix(~ group + dose, data = samples)
last <- paste(colnames(design), design[3, ], sep = "=", collapse = "; ")
cat(last, "\n", sep = "")
model.matrix `model.matrix(~ group + dose, data)` creates columns from a formula.
intercept R includes an intercept column unless the formula removes it.
factor expansion A factor such as `group` becomes indicator columns like `groupB`.