将条件应用于向量的多个元素?警告信息:条件长度> 1,只使用第一个元素

时间:2017-05-06 23:58:20

标签: r function conditional

我正在运行一系列回归模型,筛选混淆的协变量,并编写了一个函数,通过仅在协变量是混淆的情况下在控制台上显示回归结果来简化过程。下面是一些随机的样本数据来说明这个想法:

Var1 <- c(2.3940, 4.3848, 4.2840, 5.37393, 19.383948)
Var2 <- c(383, 4840, 38404, 48403, 8302)
data <- data.frame(Var1, Var2)
attach(data)

我的一个协变量是一个因子变量,有三个级别:

Var3 <- c(3938, 48403, 585038, 383028, 474937)
Var4 <- c(.373938, .473038, .830937, .3830938, 1.203)
Var5 <- as.factor(c("Ever", "Sometimes", "Never", "Sometimes", "Ever"))
Covariates <- data.frame(Var3, Var4, Var5)

功能:

confounder <- function(model) {
  model.sum <- summary(model)
  model.b <- model.sum$coefficients[2, 1]
  oldmodel <- update(model, . ~ . - x)
  oldmodel.sum <- summary(oldmodel)
  oldmodel.b <- oldmodel.sum$coefficients[2, 1]
  model.frame <- tidy(model)
  newvar.b <- model.frame[grep("x", model.frame$term), 5]
  if (abs(model.b - oldmodel.b)/abs(model.b) >= .1 | newvar.b < .05) {
    return(model.sum)
  }
}

然后我用lapply运行它:

lapply(Covariates, function(x) {
  confounder(lm(Var1 ~ Var2 + x))
})

我收到此错误消息:

Warning messages:
1: In if (abs(model.b - oldmodel.b)/abs(model.b) >= 0.1 | newvar.b <  :
  the condition has length > 1 and only the first element will be used
2: In if (abs(model.b - oldmodel.b)/abs(model.b) >= 0.1 | newvar.b <  :
  the condition has length > 1 and only the first element will be used

当我到达具有多个级别的因子变量时,如何更改此函数以应用条件?基本上,如果因子变量的任何级别符合条件,而不仅仅是第一个,我希望控制台显示回归输出。希望这是有道理的。

谢谢!

1 个答案:

答案 0 :(得分:1)

在if语句中使用any()函数:

confounder <- function(model) {
  model.sum <- summary(model)
  model.b <- model.sum$coefficients[2, 1]
  oldmodel <- update(model, . ~ . - x)
  oldmodel.sum <- summary(oldmodel)
  oldmodel.b <- oldmodel.sum$coefficients[2, 1]
  model.frame <- tidy(model)
  newvar.b <- model.frame[grep("x", model.frame$term), 5]
  if (any(abs(model.b - oldmodel.b)/abs(model.b) >= .1 | newvar.b < .05)) {
    return(model.sum)
  }
}