检查函数r中的参数

检查函数r中的参数,r,function,if-statement,lm,R,Function,If Statement,Lm,我试图通过检查参数来改进我的函数。它似乎不工作的权利,我有一个小错误,在我的代码。你有什么提示给我吗 我创建以下数据集: data("mtcars") var_IV <- c("vs" , "am" , "gear") var_exogen <- c("disp", "hp", "drat", "wt") lm.IV &

我试图通过检查参数来改进我的函数。它似乎不工作的权利,我有一个小错误,在我的代码。你有什么提示给我吗

我创建以下数据集:

data("mtcars")

var_IV <- c("vs" , "am" , "gear") 
var_exogen <- c("disp", "hp", "drat", "wt")

lm.IV <- function(endogen, IV, exogen, df) {
  f <- as.formula(
    paste(endogen, 
          paste(c(IV, exogen), collapse = " + "),
          sep = " ~ "))
  eval(bquote(   lm(.(f), data = df)   )) 
}

mtcars_iv <- lm.IV(endogen = "mpg", 
                IV = var_IV, 
                exogen = var_exogen, 
                df = mtcars)
mtcars_noiv <- lm.IV(endogen = "mpg", 
                  IV = "", 
                  exogen = var_exogen, 
                  df = mtcars)
数据(“mtcars”)

var_IV如果我理解正确,您可能希望:

lm.IV2 <- function(endogen, IV=NULL, exogen, df) {
  if (! is.null(IV)) {
    ...
  } 
  else {
    ...
  }
}

lm.IV2您调用的
lm.IV2(endogen=“mpg”,exogen=var\u exogen,df=mtcars)
。正如您所看到的,
IV
lm.IV2
的参数丢失了……只需将
IV=var_IV,
添加到调用中……对于缺少IV的情况,我在函数中有这个IF-ELSE语句。但这就是问题所在。它不起作用。来自@kitu的解决方案有效。似乎有必要将参数设置为NULL。
lm.IV2 <- function(endogen, IV=NULL, exogen, df) {
  if (! is.null(IV)) {
    ...
  } 
  else {
    ...
  }
}