R、mapply、ggplot:EXPR 必须是长度为 1 的向量
R, mapply , ggplot : EXPR must be a length 1 vector
我正在尝试使用 ggplot 和 gridExtra 绘制 table 的子集。
但是我遇到了以下错误 EXPR must be a length 1 vector.
我可以想出任何备用步骤。任何帮助都会有用。
这是我正在尝试执行的一个小例子:
# the table
dt1 <- data.table(parkName=rep(c("Zone A","Zone B", "Zone C" ,
"Zone D"),5), boundary=rep(0:1,10),v=1:20, w=rnorm(20))[]
# criteria for subsetting the table
dt2 <- data.table(zone1 = c("Zone A","Zone B"), zone2 =c("Zone B","Zone C"))
# function for subsetting the table and plotting
p <- function(sd1,sd2){
dlist <- dt1[parkName==sd1 | parkName==sd2]
b <- dt1[parkName %in% dlist]
a <- ggplot(
b,
aes(v,w)) + geom_line()
return(a)
}
mplot <- mapply(p,dt2[,zone1],dt2[,zone2])
cairo_pdf("myplot1.pdf")
do.call(marrangeGrob, c(mplot, list(nrow=2, ncol=2)))
dev.off()
# results
Error in switch(ct, ggplot = ggplotGrob(grobs[[ii.table]]), trellis =
latticeGrob(grobs[[ii.table]]), : EXPR must be a length 1 vector
改变
mplot <- mapply(p,dt2[,zone1],dt2[,zone2])
到
mplot <- mapply(p,dt2[,zone1],dt2[,zone2], SIMPLIFY=FALSE)
或
mplot <- Map(p,dt2[,zone1],dt2[,zone2])
如果返回对象的尺寸匹配,mapply()
将尝试将其结果强制转换为矩阵,但是,在这种情况下,您将始终需要一个列表。您可以将 SIMPLIFY=
参数设置为 false,或者使用 Map()
,它总是 returns 一个列表。
我正在尝试使用 ggplot 和 gridExtra 绘制 table 的子集。 但是我遇到了以下错误 EXPR must be a length 1 vector.
我可以想出任何备用步骤。任何帮助都会有用。
这是我正在尝试执行的一个小例子:
# the table
dt1 <- data.table(parkName=rep(c("Zone A","Zone B", "Zone C" ,
"Zone D"),5), boundary=rep(0:1,10),v=1:20, w=rnorm(20))[]
# criteria for subsetting the table
dt2 <- data.table(zone1 = c("Zone A","Zone B"), zone2 =c("Zone B","Zone C"))
# function for subsetting the table and plotting
p <- function(sd1,sd2){
dlist <- dt1[parkName==sd1 | parkName==sd2]
b <- dt1[parkName %in% dlist]
a <- ggplot(
b,
aes(v,w)) + geom_line()
return(a)
}
mplot <- mapply(p,dt2[,zone1],dt2[,zone2])
cairo_pdf("myplot1.pdf")
do.call(marrangeGrob, c(mplot, list(nrow=2, ncol=2)))
dev.off()
# results
Error in switch(ct, ggplot = ggplotGrob(grobs[[ii.table]]), trellis =
latticeGrob(grobs[[ii.table]]), : EXPR must be a length 1 vector
改变
mplot <- mapply(p,dt2[,zone1],dt2[,zone2])
到
mplot <- mapply(p,dt2[,zone1],dt2[,zone2], SIMPLIFY=FALSE)
或
mplot <- Map(p,dt2[,zone1],dt2[,zone2])
如果返回对象的尺寸匹配,mapply()
将尝试将其结果强制转换为矩阵,但是,在这种情况下,您将始终需要一个列表。您可以将 SIMPLIFY=
参数设置为 false,或者使用 Map()
,它总是 returns 一个列表。