我想从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"]]
道歉,如果我错过了一些明显的东西/做一些愚蠢的事情。
答案 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]