我对如何将函数参数传递给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中从函数参数传递.
提前致谢.
有没有办法直接从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) 给出一个清单:
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) 比方说,我正在使用以下内容构建散点图:
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的颜色是什么?