вызов нескольких функций в group_walk () - PullRequest
1 голос
/ 29 марта 2019

Я использовал group_walk () для создания диаграмм разделенных секций кадра данных внутри канала dplyr.Это работает хорошо, но я не могу понять, как добавить несколько функций для каждого разделенного раздела.

У меня есть фрейм данных

df = data.frame(x = rep(rnorm(5),5), y = rep(rnorm(5),5), col = rep(c(1:5),5), 
                lab = rep(c('a','b','c','d','e'),5),
                section = c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5)))
##group_walk plotting
df %>% 
  group_by(section) %>%
  group_walk(~ plot(.x$y~.x$x, col = .x$col))

То, что я хотел бы добавить, это второйФункция внутри group_walk добавляет легенду к каждому подзаговору, что-то вроде этого:

df %>% 
  group_by(section) %>%
  group_walk(~ plot(.x$y~.x$x, col = .x$col),
             ~ legend('bottomright',col = .x$col, legend = .x$lab))

Но я не знаю, какой синтаксис для этого подходит.Я бы предпочел работать в трубе dplyr, а не возвращаться к циклам for.Есть ли способ сделать это, или group_walk не поддерживает множественные вызовы функций для каждого раздела данных?

1 Ответ

2 голосов
/ 29 марта 2019

Можно использовать фигурные скобки ({}), чтобы сохранить их как один блок

library(tidyverse)
df %>% 
 group_by(section)  %>% 
 group_walk(~ {
    plot(.x$y ~ .x$x, col = .x$col)
    legend('bottomright', col = .x$col, legend = .x$lab)
  })

enter image description here


Обратите внимание, что в формуле мы можем передать имя столбца, если указать data в качестве параметра, и это также удалит .x$ в заголовке оси графика

df %>%
    group_by(section)  %>% 
    group_walk(~ {
        plot(y ~ x, col = col, data = .x)
        legend('bottomright', col = .x$col, legend = .x$lab)
   })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...