代码之家  ›  专栏  ›  技术社区  ›  NelsonGon phoxis

如何让R预测用户输入

r
  •  1
  • NelsonGon phoxis  · 技术社区  · 5 年前

    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 回复  |  直到 5 年前
        1
  •  2
  •   Julius Vainora    5 年前

    也许你想要 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 .