使用data.table生成多个qplots

时间:2014-01-31 15:13:55

标签: r ggplot2 data.table

我想从data.table为每个组生成一个散点图,并从函数返回。

我可以使用plot(下图)生成不同的图表,所以我假设这不是data.table问题:

dt = data.table(A = c(1,2,3,4), B = c(1,1,2,2), C = c(4,5,6,7))
result = dt[, list(plot = list(plot(A, C))), by = B]

但是如果我尝试用qplot做同样的事情(为了得到我可以返回的情节),我似乎最终得到了第二张图的两个副本。

dt = data.table(A = c(1,2,3,4), B = c(1,1,2,2), C = c(4,5,6,7))
result = dt[, list(plot = list(qplot(A, C))), by = B]
result[1,][["plot"]]
result[2,][["plot"]]

道歉,如果我错过了一些明显的东西/做一些愚蠢的事情。

2 个答案:

答案 0 :(得分:6)

我不是100%确切地知道发生了什么,但这是一个解决方法:

result = dt[, list(plot = list(qplot(data=.SD, A, C))), by = B]

似乎data.table保留了以某种方式执行其评估的环境,qplot只存储对此环境的引用。由于您未指定data参数,qplot将在该环境中查找数据,该值随by的每个data.table值不断变化,因此data.table操作,只留下最后一块。

答案 1 :(得分:1)

@ BrodieG的答案更好,但这是另一种方式:

plots <- lapply(unique(dt$B),function(x)ggplot_build(qplot(data=dt[B==x,],A,C)))
plots[1]
plots[2]