【发布时间】:2015-01-29 18:26:28
【问题描述】:
我正在努力以一种有意义的方式将 d_ply 和 xyplot 组合到一个大型销售数据库中,每周绘制两个面板(一个带有平均价格图表,一个带有累积数量图表)。
我的行动计划是准备数据框,对其进行子集化,并将子集与xyplot(每周创建面板)和d_ply(将 xyplot 应用于所有不同的销售产品代码)组合使用.
假设我有以下类型的数据帧(虚拟代码)和有用的值来对其进行子集化:
library(lattice)
library(latticeExtra)
library(plyr)
set.seed(1)
mydf <- as.data.frame(cbind(COD=rep(c("AB", "CD", "EF", "GH", "IJ"),20), SPEC = rep(c("a","b","c","d","e","f","g","h","i","j"),10)))
mydf$dates <- seq(as.Date("2014-09-01"), by=1, length.out=25)
mydf$x <- as.numeric(rnorm(100))
mydf$z <- as.numeric(rnorm(100))
mydf$deltaxz <- mydf$x-mydf$z
before=as.Date("2014-09-11")
after=as.Date("2014-09-03")
mydf=mydf[mydf$dates<=before & mydf$dates>=after,]
我想要的是为数据框中的每个 COD 获取以下格子对象:
graph1 <- xyplot (deltaxz ~ dates | SPEC, data=df, type=c("p","g"), col=c("black"), layout=c(1,3))
graph2 <- xyplot (1/deltaxz ~ dates | SPEC, data=df, type=c("p","g"), col=c("red"), layout=c(1,3))
我的想法是应用有用的plyr 函数,而我的选择是d_ply,所以我写了以下几行:
graph1 <- function(df) {assign("graph.1", xyplot (deltaxz ~ dates | SPEC, data=df, type=c("p","g"), col=c("black"), layout=c(1,3)), envir=.GlobalEnv)}
graph2 <- function(df) {assign("graph.2", xyplot (1/deltaxz ~ dates | SPEC, data=df, type=c("p","g"), col=c("red"), layout=c(1,3)), envir=.GlobalEnv)}
现在,如果我尝试将上述函数与d_ply 结合使用,我得到的不是格子对象,而是一个空对象:
graphic1 <- d_ply(mydf, .(mydf$COD), graph1, .print=T)
graphic2 <- d_ply(mydf, .(mydf$COD), graph2, .print=T)
我需要两个格子对象的原因是因为我想将它们绘制在另一个下方以显示某些内容(使用实际销售数据而不是虚拟数据框很明显)。这将是一个不同的挑战,所以现在我坚持我的要求。
有什么建议吗?
在此先感谢,
MZ
【问题讨论】: