我试图通过使用常规重复代码片段的函数来最小化我的代码。我需要创建大量的图表,因此我希望简化可读性。
很好,我的所有数据都在data.table结构中,我希望将其传递给我的函数来创建一个图。
可重复的示例
library(ggplot2)
library(gtable)
library(grid)
grid.newpage()
dt.diamonds <- as.data.table(diamonds)
d1 <- dt.diamonds[,list(revenue = sum(price),
stones = length(price)),
by=clarity]
setkey(d1, clarity)
mybarchart <- function(data, xdata, ydata, xlabel="", ylabel="", myfill="", myscale="comma") {
ggplot(data, aes(x=xdata,y=ydata, fill=myfill)) +
geom_bar(stat="identity") +
labs(x=xlabel, y=ylabel) +
scale_y_continuous(labels=myscale, expand=c(0,0)) +
scale_fill_identity(name="") +
theme_bw()
}
mybarchart(d1, "clarity", "revenue")
#or
mybarchart(d1, "clarity", "revenue", "clarity", "revenue", "red", "dollar")
我得到的错误是Error in eval(expr, envir, enclos) : object 'xdata' not found
,我怀疑是因为我使用的是data.table而不是data.frame。
我对此类功能的处理方法来自this等示例,并检查SO上的其他帖子,如this。到目前为止,我还没有发现其他人用data.table而不是data.frame来证明如何做到这一点
有关如何使用data.table进行此操作的任何想法吗?