获取 purrr::map 函数中迭代的名称

Get the name of iteration in purrr::map function

我正在根据 4 个子集 "virus" 变量的统计模型制作图表。我不知道如何根据 "virus" 变量放置图表的标题。

我做了这个可复制的集合:

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))

但其中 none 有效。

这就是我想要的图表。那应该是剩下的四个图表中的第一个图表的结果。

正如 markus 评论的那样,您可以使用 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))

我刚刚用 imap 替换了第二个 map 调用并添加了参数 main = .y

如果目标只是显示绘图(plot.gam 不 return 绘图对象),那么您应该使用 iwalk 而不是将其分配给plots 使其静音。

?imap