Rob*_*lly 4 r ggplot2 data.table
我一直在努力减少制作大量图表所需的复制和粘贴量,这些图表的功能/切片数据略有不同.
这是我想要做的简化示例:
test <- data.table(a=c("x","y"), b=seq(1,3), c=rnorm(18))
fixedSlices <- function(input, rowfacet, colfacet, metric){
calc <- substitute(metric)
bygroup<-c(rowfacet,colfacet)
aggregates <- input[,eval(calc),by=bygroup]
ggplot(aggregates) + geom_point(stat="identity") + aes(x="", y=V1) + facet_grid(a ~ b)
}
fixedSlices(test, "a", "b", mean(c)) #works
dynamicSlices <- function(input, rowfacet, colfacet, metric){
calc <- substitute(metric)
bygroup<-c(rowfacet,colfacet)
aggregates <- input[,eval(calc),by=bygroup]
ggplot(aggregates) + geom_point(stat="identity") + aes(x="", y=V1) + facet_grid(eval(rowfacet) ~ eval(colfacet))
}
dynamicSlices(test, "a", "b", mean(c))
#Error in layout_base(data, rows, drop = drop) : At least one layer must contain all variables used for facetting
Run Code Online (Sandbox Code Playgroud)
我希望能够让我的函数接受变量作为参数进行分面.我能够通过data.table中的列进行分组,但不能在ggplot中通过它们进行分析.
你应该用
... + facet_grid(as.formula(sprintf("%s ~ %s", rowfacet, colfacet))
Run Code Online (Sandbox Code Playgroud)
在你的代码中.
facet_grid()获取公式对象,您可以使用字符串创建公式对象as.formula().所以你应该能够做到这样的事情:
facet_grid(as.formula(paste(rowfacet, "~", colfacet)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |