Как позволить R предсказать ввод пользователя - PullRequest
0 голосов
/ 13 января 2019

Допустим, у меня есть эта функция, которая возвращает коэффициенты линейной модели:

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 уже внес предложение.

1 Ответ

0 голосов
/ 13 января 2019

Возможно, вы хотите 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...