我写了一个快速函数来绘制一些人口统计信息,但是它无法识别我选择的变量。我知道这poverty_rate
是我数据框中的一列,当我这样做时会显示出来,names(df)
并且在以前的代码块中已经使用过它。是的,当我运行下面的函数时,我得到了Error in mean(demog, na.rm = TRUE) : object 'poverty_rate' not found
。我究竟做错了什么?
dense_plot_demos <- function(df, id_list, demog, color_id, demo_name, qual) {
df %>%
filter(GEOID %in% id_list) %>%
group_by(GEOID) %>%
mutate(avg_var = mean(demog, na.rm=TRUE)) %>%
ggplot(aes(x=avg_var)) +
geom_histogram(aes(y=..density..), color="black", fill="white", bins=20) +
geom_density(alpha=.5, fill=color_id) +
theme_bw() +
xlab(demo_name) +
ylab("Density") +
theme(plot.title = element_text(hjust = 0.5)) +
labs(title = paste(demo_name, "in", qual, "Filing Counties"))
}
top_pov <- dense_plot_demos(df, top_ids, poverty_rate, color_pal[1], "Poverty Rate", "Highest")
ETA:谢谢您的所有建议和资源。我发现以下代码对我的函数进行了最小的修改:
dense_plot_demos <- function(df, id_list, demog, color_id, demo_name, qual) {
demog <- sym(demog)
df %>%
filter(GEOID %in% id_list) %>%
group_by(GEOID) %>%
mutate(avg = (mean(!! demog, na.rm=TRUE))) %>%
ggplot(aes(x=avg)) +
geom_histogram(aes(y=..density..), color="black", fill="white", bins=20) +
geom_density(alpha=.5, fill=color_id) +
theme_bw() +
xlab(demo_name) +
ylab("Density") +
theme(plot.title = element_text(hjust = 0.5)) +
labs(title = paste(demo_name, "in", qual, "Filing Counties"))
}
top_pov <- dense_plot_demos(ecplot, top_lists, "poverty_rate", color_pal[1], "Poverty Rate", "Highest")
您好carousallie,@ camille,@ ravic_的建议可以解决您的问题。要点是要mean(demog, na.rm=TRUE)
正确评估。对于您编写的代码,可以通过创建一个称为demog的虚拟列来快速解决,该伪列是demog变量的副本:
dense_plot_demos <- function(df, id_list, demog, color_id, demo_name, qual) {
#add this line
df$demog <- df[,demog]
df %>%
filter(GEOID %in% id_list) %>%
group_by(GEOID) %>%
mutate(avg_var = mean(demog, na.rm=TRUE)) %>%
ggplot(aes(x=avg_var)) +
geom_histogram(aes(y=..density..), color="black", fill="white", bins=20) +
geom_density(alpha=.5, fill=color_id) +
theme_bw() +
xlab(demo_name) +
ylab("Density") +
theme(plot.title = element_text(hjust = 0.5)) +
labs(title = paste(demo_name, "in", qual, "Filing Counties"))
}
#simulate data
set.seed(100)
df <- data.frame(
GEOID = sample(letters,300,replace=TRUE),
poverty_rate = rnorm(300)
)
# some values for your other input
top_ids = letters[1:10]
color_pal = "lightblue"
# plot, this works
# note use "poverty_rate" as demog
top_pov <- dense_plot_demos(df, top_ids,
"poverty_rate", color_pal[1], "Poverty Rate", "Highest")
上面的方法是有效的,因为您的数据帧中没有称为“ demog”的列(我希望如此),因此您的后续代码功能类似于普通代码。
如果您想真正使它在没有虚拟道具的情况下工作,则将mutate部分更改为:
mutate(avg_var=eval(parse(text=paste("mean(",demog,",na.rm=TRUE)"))))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句