ggplot2和purrr:使用split()循环并引用索引值

ggplot2和purrr:使用split()循环并引用索引值,r,ggplot2,purrr,R,Ggplot2,Purrr,我正在尝试使用ggplot2和purrr::map()以及split()来循环许多绘图。我可以让绘图正常工作,但提取分割值用作标题时遇到问题 令牌数据: y=tibble(SplitVar=rep(c('A','B','C'),3), Variable=c(rep('A',3),rep('B',3),rep('C',3)), Value=runif(n=9)) 我想要的绘图由以下内容生成: y%>%split(y$SplitVar)%>%map(

我正在尝试使用ggplot2和purrr::map()以及split()来循环许多绘图。我可以让绘图正常工作,但提取分割值用作标题时遇到问题

令牌数据:

y=tibble(SplitVar=rep(c('A','B','C'),3),
         Variable=c(rep('A',3),rep('B',3),rep('C',3)),
         Value=runif(n=9))
我想要的绘图由以下内容生成:

y%>%split(y$SplitVar)%>%map(~ggplot(.,aes(Variable,Value,fill=Variable))+
                             geom_col(position='dodge'))

但我不知道如何提取SplitVar值'A','B','C'用作:

...+labs(title=...)
我可以直接提取值:

y%>%split(y$SplitVar)%>%names(.)
[1] "A" "B" "C"
但当我试图把它添加到情节中时

y%>%split(y$SplitVar)%>%map(~ggplot(.,aes(Variable,Value,fill=Variable))+
                            geom_col(position='dodge')+
                            labs(title=names(.)))
我得到: 使用变量的名称,而不是值

编辑: A的“我的数据”值实际上是为第二个拆分值嵌套的。我现在可以得到我需要的标签,但是我不能得到一个映射函数,它可以进入嵌套循环,生成第一个值的绘图,然后返回到其他因子。订正投入如下:

y=tibble(Split1=c(rep('A',9),rep('B',3),rep('C',3)),
   Split2=c(rep(c('A','B','C'),3),rep('D',3),rep('E',3)),
   Var=c(rep('A',3),rep('B',3),rep('C',3),rep(c('A','B','C'),2)),
   Value=runif(15)
   )
我可以使用以下命令将TIBLE拆分为相应的嵌套列表:

y%>%split(y$Split1)%>%map(~if(.$Split1=='A') split(.,.$Split2,drop=TRUE) else .)
但我能想到的最好办法是分别定义两个过程:

y[[1]]%>%map(~ggplot(.,aes(Variable,Value,fill=Variable))+
             geom_col(position='dodge')+
             labs(title=unique(.x$Split2)))

y2=y%>%filter(Split1!='A')
y2%>%split(y2$Split1,drop=TRUE)%>%map(~ggplot...)
这对我很有用:

y %>%
   split(y$SplitVar) %>%
    map(~ggplot(.,aes(Variable,Value,fill=Variable))+
                        geom_col(position='dodge')+
                        labs(title=unique(.x$SplitVar)))
也许这样可以:

y %>%
  split(y$SplitVar) %>%
  map2(
    names(.),
    ~ ggplot(.x,aes(Variable,Value,fill=Variable))+
      geom_col(position='dodge')+
      labs(title= .y))

太好了,谢谢你的快速回复。我不熟悉.x和.y语法,所以我将进行一些阅读和实验!如果要在
map
语句中引用数据本身,请使用
.x
。您还可以使用
map2
,例如@Aurele used,在这种情况下,数据仍然是
.x
和第二个变量,
names(.)
.y
引用。我在我的应用程序中发现了一个复杂问题:y$SplitVar[1]实际上在SplitVar2中有自己的级别,但这是唯一一个这样的变量。我已经得到了为“a”嵌套的列表的代码,但是我找不到一个干净的方法,只为“a”将map()单步放入嵌套列表,然后退一步,像往常一样绘制其余示例。我已经花了2个小时进行调试,一有机会我就会更新示例数据。