小编sin*_*eso的帖子

将函数参数传递给dplyr和ggplot

我对如何将函数参数传递给dplyr和ggplot代码感到困惑.我正在使用最新版本的dplyr和ggplot2这是我的代码来生成一个条形图(清晰度与平均价格)

diamond.plot<- function (data, group, metric) {
    group<- quo(group)
    metric<- quo(metric)
    data() %>% group_by(!! group) %>%
           summarise(price=mean(!! metric)) %>% 
           ggplot(aes(x=!! group,y=price))+
           geom_bar(stat='identity') 
}

diamond.plot(diamonds, group='clarity', metric='price')
Run Code Online (Sandbox Code Playgroud)

错误:

Error in UseMethod("group_by_") : no applicable method for 'group_by_' applied to an object of class "packageIQR"
Run Code Online (Sandbox Code Playgroud)

对于最新版本的dplyr,强调不推荐使用强调的verbs_().好像我们应该使用quosures.

我的问题:

  • 有人可以澄清目前的最佳做法吗?
  • 上面的代码出了什么问题?(没有下划线dplyr动词请..)

  • 在ggplot中,我知道我们可以使用aes_string(),但在我的例子中,只有一个参数在aes中从函数参数传递.

提前致谢.

r ggplot2 dplyr tidyeval rlang

14
推荐指数
2
解决办法
1788
查看次数

如何从 tbl_dbi 获取字段名称?

有没有办法直接从tbl_dbi对象中获取字段名称(db_mtcars如下)?

 library(RSQLite)
 library(dbplyr)
 library(dplyr)
 con <- dbConnect(RSQLite::SQLite(), ":memory:")
 dbWriteTable(con, "mtcars", mtcars)

 db_mtcars <- tbl(con, "mtcars")
Run Code Online (Sandbox Code Playgroud)

r dbplyr

5
推荐指数
1
解决办法
1830
查看次数

从R中的列表中获取不相交的集合

给出一个清单:

foo <- list(c("a", "b", "d"), c("c", "b"), c("c"),
            c("b", "d"), c("e", "f"), c("e", "g"))
Run Code Online (Sandbox Code Playgroud)

获取包含其内容的不相交集的列表的有效方法是什么?

在这里,我想获得:

[[1]]
[1] "a" "b" "c" "d"

[[2]]
[1] "e" "f" "g"
Run Code Online (Sandbox Code Playgroud)

我设法提出的解决方案似乎过于复杂和缓慢(我正在使用包含多达数百个元素的大型列表(4000多个元素)).

谢谢!


解决方案基准测试

谢谢大家的意见.igraph方法非常好.我对提出的解决方案进行了一些基准测试,并使用igraph与@flodel建议是有效的.这里的例子(iGrp)有3170个元素.

> microbenchmark(igraph_method(iGrp), igraph_method2(iGrp), iterative_method(iGrp), times=10L)
## Unit: milliseconds
##                    expr       min        lq    median        uq       max neval
##     igraph_method(iGrp) 6892.8534 7140.0287 7229.5569 7396.2458 8044.9796    10
##    igraph_method2(iGrp)  381.4555  391.2097  442.3282  472.5641  537.4885    10
##  iterative_method(iGrp) 7118.7857 7272.9568 7595.9700 7675.2888 8485.4388    10

#### functions used

igraph_method <- function(lst) …
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
1
解决办法
1212
查看次数

使用ggplot2,如何从价值中获取颜色?

比方说,我正在使用以下内容构建散点图:

library(tidyverse)
data_frame(x = rnorm(500), y = rnorm(500), val = rnorm(500)) %>%
    ggplot(aes(x, y, colour = val)) +
    geom_point() +
    scale_colour_gradient2(low = "red", high = "blue", mid = "yellow")
Run Code Online (Sandbox Code Playgroud)

有没有办法让十六进制颜色代码与任意值(属于现有值的范围)相关联?换句话说,如何#ffff00从0 获得(黄色),或者0.2的颜色是什么?

r ggplot2

3
推荐指数
1
解决办法
109
查看次数

标签 统计

r ×4

ggplot2 ×2

dbplyr ×1

dplyr ×1

rlang ×1

tidyeval ×1