#r
#r
Вопрос:
Я пытаюсь подготовить уравнения для моделей. Для этого мне нужно объединить элементы списка (p переменных) и вектора (o переменных), чтобы получить следующее:
Для модели 1 o1 = p1 p2 p3
Для модели 2 o2=p2 p3
Я безуспешно пытался ниже:
outcome <- c("o1", "o2")
predictor <- list(c("p1", "p2", "p3"),
c("p2", "p3"))
link=c("binomial", "gaussian")
try <- function(outcomes, predictors) {
for(o in 1:length(outcome)) {
eq <- paste(outcome[o], "~")
for(p in predictor) {
for(e in 1:length(p[[o]])) {
eq=paste0(eq, p[[o]][[e]], " ")
#print(eq)
}
}
eq <- substr(eq,1,nchar(eq)-1)
eq <- paste0(link[o], "-", eq)
print(eq)
}
}
try(outcome,predictor)
[1] "binomial-o1 ~p1 p2"
[1] "gaussian-o2 ~p2 p3"
Я пытаюсь получить:
[1] "binomial-o1 ~p1 p2 p3"
[1] "gaussian-o2 ~p2 p3"
Ответ №1:
Используя purrr, вы можете сделать это следующим образом:
library(purrr)
pmap(list(outcome, predictor,link), function(x,y,z) {
paste0(z,"-",x, " ~", paste(y,collapse = " "))
})
Ответ №2:
Мы можем использовать Map
Map(function(x, y, z) sprintf("%s-%s", z,
deparse(reformulate(x, response = y))), predictor, outcome, link)
-вывод
#[[1]]
#[1] "binomial-o1 ~ p1 p2 p3"
#[[2]]
#[1] "gaussian-o2 ~ p2 p3"
Или аналогичная опция в for
цикле.
try_fn <- function(outcomes, predictors, links) {
eq <- character(length(outcomes))
for(i in seq_along(outcomes)){
eq[i] <- sprintf("%s-%s", links[i],
deparse(reformulate(predictors[[i]], response = outcomes[i])))
}
return(eq)
}
try_fn(outcome, predictor, link)
#[1] "binomial-o1 ~ p1 p2 p3" "gaussian-o2 ~ p2 p3"
ПРИМЕЧАНИЕ: Вложенный for
цикл не нужен, так как мы пытаемся создать формулу на основе соответствующих элементов. Поэтому просто перебирайте последовательность одного из элементов, т.Е. «Результат», используйте его в качестве индекса для подмножества других объектов, соответствующих элементам, создайте формулу с reformulate
помощью и отформатируйте ее с помощью sprintf
Также Map
выполняется то же самое, когда он создает формулу из каждого соответствующего элемента входных объектов и форматирует ее на sprintf
основе элементов «link»