Обычно вы не хотите этого делать, потому что это нарушает ссылочную прозрачность и добавляет ненужную сложность: в частности, делает непредсказуемым, какие переменные существуют во время выполнения вашего кода, что усложняет код для чтения, поддержки и отладки.
В любом случае, в вашем случае присвоение переменной с нефиксированным именем на самом деле не помогает при построении вашей матрицы модели. К счастью, в вашем случае это тоже не нужно. Ваш существующий код работает как есть. Но если вы хотите изменить имена выходных столбцов, сделайте это на уровне имени столбца , а не на уровне имени переменной :
foo <- function(data, what) {
dum <- data[[what]]
if (! is.character(dum)) stop('Not a character variable.', call. = FALSE)
model <- data.frame(model.matrix(~ dum))[-1L]
colnames(model) <- sub('^dum', what, colnames(model))
model
}
В качестве альтернативы, и в этом случае еще проще, построить формулу из what
:
foo <- function(data, what) {
if (! is.character(data[[what]])) stop('Not a character variable.', call. = FALSE)
formula = as.formula(paste('~', what))
data.frame(model.matrix(formula, data = data))[-1L]
}