首页 > 解决方案 > R for 循环只通过一个向量

问题描述

我想先连接一个逻辑模型的方程,然后是一个线性模型。

对于模型 1,o1=p1+p2+p3(二项式将输入到 glm 函数中的族参数)

对于模型 2,o2=p1+p2+p3(高斯将输入到 glm 函数中的族参数)

在现实生活中的例子中,会有更多的模型。

这是基本场景:

outcome <- c("o1", "o2")
predictor <- c("p1", "p2", "p3")
link=c("binomial", "gaussian")


try <- function(outcomes, predictors) {
for(o in outcome) {
  eq <- paste(o, "~")
  for(p in predictor) {
    eq=paste0(eq, p, "+")
  }
  # remove extra +
eq <- substr(eq,1,nchar(eq)-1)

# model will go here
eq <- lapply(link, function(x) paste0(x, " - ", eq))
print(eq)
}
}

try(outcomes=outcome, predictors=predictor)

输出:

[[1]]
[1] "binomial - o1 ~p1+p2+p3"

[[2]]
[1] "gaussian - o1 ~p1+p2+p3"

[[1]]
[1] "binomial - o2 ~p1+p2+p3"

[[2]]
[1] "gaussian - o2 ~p1+p2+p3"

相反,我想要:

[1] "binomial - o1 ~p1+p2+p3"

[1] "gaussian - o2 ~p1+p2+p3"

标签: r

解决方案


我们能做的

try1 <- function(outcomes, predictors) {
      Map(function(x, y) paste(y, '-', 
            deparse(reformulate(predictors, x))), outcomes, link)   

 }

-测试

try1(outcomes=outcome, predictors=predictor)
#$o1
#[1] "binomial - o1 ~ p1 + p2 + p3"

#$o2
#[1] "gaussian - o2 ~ p1 + p2 + p3"

推荐阅读