我正在研究如何在线使用R函数,但仍然很难弄清楚。请帮忙。
我的初始代码如下:
whatever %>%
group_by(a) %>%
summarize(count=n()) %>%
collect() %>%
ggplot(aes(x=a, y=count)) +
geom_point()
我想重复多次,因为我想用相同的功能检查其他列。
所以我写道:
point_dist <- function(dta, vari) {
dta %>%
group_by(vari) %>%
summarize(count=n()) %>%
collect() %>%
ggplot(aes(x=vari, y=count)) +
gemo_point()
}
point_dist(whatever, a)
但是继续告诉我:
Error in eval_bare(sym, env) : object 'a' not found
不知道为什么。
我要么不知道这是我正确的方向。
再次感谢。
答案 0 :(得分:0)
如果您要汇总数据和管道到ggplot,则无需使用collect()
。
df <- data.frame(group=sample(letters[1:10],1000,T))
df %>% group_by(group) %>% summarise(n=n()) %>%
ggplot(aes(group,n)) + geom_point()
如果要将此摘要和绘图方法应用于多个列,建议您尝试gather()
,然后使用+ facet_wrap()
和条形图一次绘制所有内容。
df <- data.frame(matrix(sample(letters[1:10],10000,T),ncol = 10))
df %>% gather(k,v) %>% group_by(k,v) %>% summarise(n=n()) %>%
ggplot(aes(k,n,fill=v)) + geom_bar(stat='identity') +
facet_wrap(~v) + theme(legend.position = 'none')
答案 1 :(得分:0)
您的问题与dplyr
函数倾向于给您的非标准评估有关。当您在第一次调用a
时引用point_dist
时,R会尝试对其进行评估,这当然会失败。 (当您在调用环境或更高版本的环境中有这样的变量命名时,这会更加令人困惑。)
dplyr
中的NSE意味着您可以执行类似select(mtcars, cyl)
的操作,而对于大多数标准评估功能,您将需要myfunc(mtcars, "cyl")
,因为没有名为{{ 1}}。
根据您的情况,尝试:
cyl
如果您熟悉普通的R函数定义和/或不熟悉NSE,则这种在函数中处理未加引号的列名的方法可能会造成混淆。如果可以的话,这可能是一个很好的模板,否则,我强烈强烈建议您在下面的第一个参考文献中阅读更多内容。
NSE的一些很好的参考,特别是在tidyverse内容中/周围: