【问题标题】:Get the name of iteration in purrr::map function在 purrr::map 函数中获取迭代的名称
【发布时间】:2018-09-02 16:34:26
【问题描述】:

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

但它们都不起作用。

这就是我想要的图表。这应该是其余四个图表中第一个图表的结果。

【问题讨论】:

标签: r plot purrr gam


【解决方案1】:

正如马库斯所说,您可以使用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 不返回绘图对象),那么您应该使用 iwalk 而无需将其分配给 plots 以使其静音。

?imap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2013-05-20
    • 2018-11-16
    相关资源
    最近更新 更多