【发布时间】:2021-09-30 14:43:41
【问题描述】:
有一个数据框,例如:
df <- data.frame(k = sample(1:2, 100, replace = TRUE),
l = sample(1:2, 100, replace = TRUE),
g = sample(1:3, 100, replace = TRUE, prob = c(0.2, 0.6, 0.2)))
我需要按 g 分组的 l 和 k 的比例图,所以我给自己写了一个函数:
library(tidyverse)
fun_gg_factor <- function(p) {
df %>%
group_by(g) %>%
count({{p}}) %>%
mutate(Anteil = n / sum(n)) %>%
ggplot(aes(x = {{p}}, y = Anteil)) +
geom_col(position = position_dodge()) +
facet_grid(.~g)
}
它按预期工作:
fun_gg_factor(k)
这很好。但是我的 rl df 比 k 和 l 有更多的变量。多得多。所以我不想像这样手动调用函数几十次:
fun_gg_factor(k)
fun_gg_factor(l)
fun_gg_factor(m)
.
.
.
fun_gg_factor(z)
sapply() 及其形式浮现在脑海中:
sapply(c(k, l), fun_gg_factor)
这不起作用,因为 k 和 l 不是对象。即使他们是,那也不是我想要的。我不需要为 df$k 的每个元素绘制图 - 我想要不同列的图。
也许我尝试一个循环:
for (i in c(k, l)) {
fun_gg_factor(i)
}
但是不,k 和 l 仍然不是对象。
显然我对这个问题的表述是缺乏的。我如何有效地为此或任何类似的自定义函数使用不同的参数?
【问题讨论】: