【发布时间】:2021-04-18 19:56:19
【问题描述】:
我想先连接一个逻辑模型的方程,然后是一个线性模型。
对于模型1,o1=p1+p2+p3(二项式将输入到glm函数中的family参数)
对于模型2,o2=p1+p2+p3(glm函数中的family参数将输入高斯)
在现实生活中的例子中,会有更多的模型。
这是基本场景:
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"
【问题讨论】:
-
你为什么要这样做?我希望你不打算解析字符串。反正你不需要lapply,paste0是矢量化的。
-
您的循环的问题是有 2 个循环!使用类似
for(i in 1:length(outcome))的循环并在循环内使用outcome[i]和link[i]。 (或下面的优秀答案之一。)
标签: r