让我们说这个函数可以返回线性模型的系数:
lmfun<-function(df,yname,xname){
y<-deparse(substitute(yname))
x<-deparse(substitute(xname))
f<-as.formula(paste0(y,"~",x))
lm.fit<-do.call("lm",list(data=quote(df),f))
coef(lm.fit)
}
现在在mtcars
上使用此功能,我可以输入:
lmfun(mtcars,yname=mpg,disp)
但是,如何获得R来预测用户输入,就像它在多个软件包中一样?在我完成输入mpg
之前,R已经提出了建议。
答案 0 :(得分:2)
也许您想要match.arg
。例如:
lmfun <- function(df, yname, xname){
y <- match.arg(deparse(substitute(yname)), names(df))
x <- match.arg(deparse(substitute(xname)), names(df))
f <- as.formula(paste0(y, "~", x))
lm.fit <- do.call("lm", list(data = quote(df), f))
coef(lm.fit)
}
lmfun(mtcars, yname = mp, dis)
# (Intercept) disp
# 29.59985476 -0.04121512
当然,必须能够明确匹配名称:
lmfun(mtcars, yname = mp, d)
# Error in match.arg(deparse(substitute(xname)), names(df)) :
# 'arg' should be one of “mpg”, “cyl”, “disp”, “hp”, “drat”, “wt”, “qsec”,
# “vs”, “am”, “gear”, “carb”
这次没有用,因为d
可能是disp
或drat
。