В вашем примере, я думаю, вам не нужно иметь аргумент df , потому что x, y, z, i ... являются векторами.
Когда вы вызываете polyRegress (x, y, z, m) , вы используете векторы x, y и z, а не имена столбцов в m.
Таким образом, в первом случае вы можете использовать решения, которые даютс помощью с использованием замены, чтобы получить имя аргумента, с помощью для изменения имен коэффициентов.
# create the data
x <- c(1,2,3,5,6,7,8,1,1,2,1)
y <- c(2,3,4,5,1,3,4,5,6,7,2)
z <- c(2,3,4,1,2,3,33,5,2,4,5)
i <- c(2,4,4,5,1,3,2,5,6,7,2)
j <- c(2,9,4,1,2,3,4,5,2,4,5)
k <- c(2,12,4,5,1,3,4,5,6,7,2)
q <- c(2,55,4,1,2,5,4,5,2,4,5)
m <- data.frame(x,y,z)
# the function
polyRegress <- function(pre1, pre2, dv){
# change pre1 by "x" or "i" ...
pre1 <- deparse(substitute(pre1))
pre2 <- deparse(substitute(pre2))
dv <- deparse(substitute(dv))
f <- paste0(dv, " ~ ", pre1, " + ", pre2, " + ", "I(", pre1, "^2)", " + ", "I(", pre1, "*", pre2, ")", " + ", "I(", pre2, "^2)")
results <- lm(f)
# at this step results$call = lm(formula = f), let's change it !
results$call <- call('lm', formula = formula(f))
summary(results)
}
# main
polyRegress(x, y, z)
polyRegress(i, j, k)
Но если вы действительно хотите вызвать переменную в вашем фрейме данных, вы должны изменить аргументы по символам. Потому что вы хотите использовать имена столбцов dataframe.
# create the data
m <- data.frame(x,y,z,i,j,k)
rm(x,y,z,i,j,k)
# the function
polyRegress <- function(pre1, pre2, dv, df){
f <- paste0(dv, " ~ ", pre1, " + ", pre2, " + ", "I(", pre1, "^2)", " + ", "I(", pre1, "*", pre2, ")", " + ", "I(", pre2, "^2)")
results <- lm(f, data = df)
# at this step results$call = lm(formula = f, data = df), let's change it !
results$call <- call('lm', formula = formula(f), data = substitute(df))
summary(results)
}
# main
polyRegress("x", "y", "z", m)
polyRegress("i", "j", "k", m)
Надеюсь, я понимаю ваше требование.