Получить имя итерации в функции purrr :: map - PullRequest
0 голосов
/ 02 сентября 2018

Я делаю графики из 4 статистических моделей, поднастраивая переменную «вирус». Я не знаю, как поставить заголовок графиков в соответствии с переменной «вируса».

Я сделал этот воспроизводимый набор:

library(dplyr)
library(tidyr)
library(lubridate)
library(mgcv)
library(purrr)


set.limpio <- data.frame(Codigo= 1:1000, Dia = rnorm(1000,100,2),
                     R = rbinom(1000,1,.5),
                    virus = c(rep("V1",250),
                              rep("V2",250),
                              rep("V3",250),
                              rep("V4",250)))
plots <- set.limpio %>% 
  filter(.$Dia < 250) %>%
  split(.$virus) %>%
  map(~ gam(R ~ s(Dia) + s(Codigo, bs = "re"), data = ., 
            family = binomial(link = "logit"), method = "REML")) %>% 
  map( ~ plot.gam(.,shade = T, scale = 0, scheme = 3,
                  xlab = "Days",
                  ylab = "Positivity"))

В этом разделе должен быть заголовок

map( ~ plot.gam(.,shade = T, scale = 0,scheme = 3,xlab = "Days", ylab = 
    "Positivity", main = "here should be the title"))

Я пытался:

main = paste(names(.)) 

также с

deparse(substitute(obj))

Но ни один из них не работал.

Вот как я хочу графики. Это должно быть результатом первого графика из четырех оставшихся. enter image description here

1 Ответ

0 голосов
/ 02 сентября 2018

Как прокомментировал Маркус, вы можете использовать imap.

plots <- set.limpio %>% 
  filter(.$Dia < 250) %>%
 split(.$virus) %>%
  map(~ gam(R ~ s(Dia) + s(Codigo, bs="re"), data = ., 
          family = binomial(link = "logit"), method="REML")) %>% 
  imap( ~ plot.gam(.,shade = T, scale = 0,scheme = 3,xlab = "Days", ylab = 
"Positivity", main= .y))

Я только что заменил второй map вызов на imap и добавил параметр main = .y

Если цель состоит в том, чтобы просто отобразить графики (plot.gam не возвращает объекты графиков), то вместо этого следует использовать iwalk, и вам не нужно присваивать его plots, чтобы отключить его.

см. ?imap

...