2015-11-06 2 views
8

Одна действительно классная функция из пакета ggplot2, который я никогда не использовал достаточно, добавлял списки слоев к сюжету. Самое интересное в том, что я могу передать список слоев в качестве аргумента функции и добавить их в сюжет. Тогда я мог бы получить желаемый внешний вид сюжета, не обязательно возвращая сюжет из функции (важно ли это хорошая идея, другое дело, но это было возможно).Есть ли способ «проложить через список»?

library(ggplot2) 
x <- ggplot(mtcars, 
      aes(x = qsec, 
       y = mpg)) 

layers <- list(geom_point(), 
       geom_line(), 
       xlab("Quarter Mile Time"), 
       ylab("Fuel Efficiency")) 

x + layers 

Есть ли способ сделать это с помощью труб? Что-то похожее на:

#* Obviously isn't going to work 
library(dplyr) 
action <- list(group_by(am, gear), 
       summarise(mean = mean(mpg), 
         sd = sd(mpg))) 

mtcars %>% action 
+1

Это сделает это! Очень аккуратный. – Benjamin

ответ

15

Чтобы построить последовательность magrittr шагов, начните с .

action = . %>% group_by(am, gear) %>% summarise(mean = mean(mpg), sd = sd(mpg)) 

Тогда он может быть использован, как это представлялось в OP:

mtcars %>% action 

Как list , мы можем подмножество, чтобы видеть каждый шаг:

action[[1]] 
# function (.) 
# group_by(., am, gear) 

Чтобы просмотреть все шаги, используйте functions(action) или просто введите имя:

action 
# Functional sequence with the following components: 
# 
# 1. group_by(., am, gear) 
# 2. summarise(., mean = mean(mpg), sd = sd(mpg)) 
# 
# Use 'functions' to extract the individual functions. 
Смежные вопросы