首页 > 解决方案 > 在 purrr::map 函数中获取迭代的名称

问题描述

我正在从 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))

但他们都没有工作。

这就是我想要的图表。这应该是其余四个图表中第一个图表的结果。 在此处输入图像描述

标签: rplotpurrrgam

解决方案


正如马库斯所说,您可以使用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


推荐阅读