探せばどっかにある気もするけど。purrrの練習も兼ねてメモ。
library(dplyr) library(purrr) library(ggplot2) library(stringr) packageVersion("ggplot2") #> [1] ‘1.0.1.9000’ e <- asNamespace('ggplot2') Geoms <- grep("^geom_.+", ls(e), value = TRUE) # geom_XXXという名前の関数のリスト geoms <- Geoms %>% map(~ get(., envir = e)) geoms_list <- geoms %>% # 引数のリスト map(~ formals(.)) %>% # NULLのやつは取り除く。あと「...」とか「map」というのもsymbolで、うまくdata.frame化できないので取り除く map(~ keep(., ~ !(class(.) %in% c("NULL", "name")))) # 要素を取り除いた結果、要素数がゼロになってしまうlistがあるのでそれを取り除く idx <- geoms_list %>% map(~ length(.) > 0) %>% flatten # data.frame化する geoms_df <- geoms_list[idx] %>% map(~ as_data_frame(.)) %>% bind_rows # geom名を入れる geoms_df$geom = str_replace(Geoms[idx], "^geom_", "") # 出力 knitr::kable(geoms_df[c("geom", "stat", "position")])
| geom | stat | position |
|---|---|---|
| abline | abline | identity |
| area | identity | stack |
| bar | bin | stack |
| bin2d | bin2d | identity |
| blank | identity | identity |
| boxplot | boxplot | dodge |
| contour | contour | identity |
| count | sum | identity |
| crossbar | identity | identity |
| curve | identity | identity |
| density | density | identity |
| density2d | density2d | identity |
| dotplot | bindot | identity |
| errorbar | identity | identity |
| errorbarh | identity | identity |
| freqpoly | bin | identity |
| hex | binhex | identity |
| histogram | bin | stack |
| hline | hline | identity |
| jitter | identity | jitter |
| line | identity | identity |
| linerange | identity | identity |
| map | identity | NA |
| path | identity | identity |
| point | identity | identity |
| pointrange | identity | identity |
| polygon | identity | identity |
| quantile | quantile | identity |
| raster | identity | identity |
| rect | identity | identity |
| ribbon | identity | identity |
| rug | identity | identity |
| segment | identity | identity |
| smooth | smooth | identity |
| step | identity | identity |
| text | identity | identity |
| tile | identity | identity |
| violin | ydensity | dodge |
| vline | vline | identity |
追記:「そこでlambdaRですよ!」という親分のアドバイスをもらったのでr-wakalangに貼ってもらったカンペを片手に書きなおしました。
library(dplyr) library(lambdaR) library(ggplot2) library(stringr) packageVersion("ggplot2") #> [1] ‘1.0.1.9000’ e <- asNamespace('ggplot2') Geoms <- grep("^geom_.+", ls(e), value = TRUE) geoms <- Geoms %>% Map_(get(._, envir = e)) geoms_list <- geoms %>% Map_(formals(._)) %>% Map_(x: Filter_(x, !(class(._) %in% c("NULL", "name")))) idx <- geoms_list %>% Map_(length(._) > 0) %>% unlist geoms_df <- geoms_list[idx] %>% Map_(as_data_frame(._)) %>% bind_rows geoms_df$geom = str_replace(Geoms[idx], "^geom_", "") knitr::kable(geoms_df[c("geom", "stat", "position")])