如何在Sparklyr中使用R函数

时间:2019-07-16 21:42:07

标签: r dplyr sparklyr

我正在研究如何在线使用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

不知道为什么。

我要么不知道这是我正确的方向。

再次感谢。

2 个答案:

答案 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()

enter image description here

如果要将此摘要和绘图方法应用于多个列,建议您尝试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')

enter image description here

答案 1 :(得分:0)

您的问题与dplyr函数倾向于给您的非标准评估有关。当您在第一次调用a时引用point_dist时,R会尝试对其进行评估,这当然会失败。 (当您在调用环境或更高版本的环境中有这样的变量命名时,这会更加令人困惑。)

dplyr中的NSE意味着您可以执行类似select(mtcars, cyl)的操作,而对于大多数标准评估功能,您将需要myfunc(mtcars, "cyl"),因为没有名为{{ 1}}。

根据您的情况,尝试:

cyl

如果您熟悉普通的R函数定义和/或不熟悉NSE,则这种在函数中处理未加引号的列名的方法可能会造成混淆。如果可以的话,这可能是一个很好的模板,否则,我强烈强烈建议您在下面的第一个参考文献中阅读更多内容。

NSE的一些很好的参考,特别是在tidyverse内容中/周围: