首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R for循环,该循环仅通过向量一次

R for循环,该循环仅通过向量一次
EN

Stack Overflow用户
提问于 2021-01-14 02:50:21
回答 2查看 41关注 0票数 0

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

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

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

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

以下是基本场景:

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
[[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"

相反,我想:

代码语言:javascript
运行
复制
[1] "binomial - o1 ~p1+p2+p3"

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-14 02:52:28

我们可以做到

代码语言:javascript
运行
复制
try1 <- function(outcomes, predictors) {
      Map(function(x, y) paste(y, '-', 
            deparse(reformulate(predictors, x))), outcomes, link)   

 }

-testing

代码语言:javascript
运行
复制
try1(outcomes=outcome, predictors=predictor)
#$o1
#[1] "binomial - o1 ~ p1 + p2 + p3"

#$o2
#[1] "gaussian - o2 ~ p1 + p2 + p3"
票数 2
EN

Stack Overflow用户

发布于 2021-01-14 03:09:00

也许try可以像下面这样写

代码语言:javascript
运行
复制
try <- function(outcomes, predictors) {
  as.list(
    paste0(
      do.call(
        paste,
        c(data.frame(link, outcomes), sep = " - ")
      ),
      paste0(" ~ ", paste0(predictors, collapse = " + "))
    )
  )
}

这样的话

代码语言:javascript
运行
复制
> try(outcome, predictor)
[[1]]
[1] "binomial - o1 ~ p1 + p2 + p3"

[[2]]
[1] "gaussian - o2 ~ p1 + p2 + p3"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65708112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档