我正在使用GGally::ggpairs
创建散点图矩阵。我正在使用自定义函数(下面称为my_fn
)来创建左下角的非对角子图。在调用该自定义函数的过程中,会计算每个子图的信息,并且我希望将其保存以备后用。
在下面的示例中,每个h@cID
都是一个具有100个值的int[]结构。在my_fn
中共创建10次(每个左下角的非对角子图一次)。我正在尝试将这10个h@cID
结构全部存储到listCID
列表对象中。
我尝试了这种方法,但没有成功,我还尝试了其他几种变体(例如将listCID
作为my_fn
的输入参数,或在最后返回它),但也没有成功。
是否有可能通过my_fn
高效地存储这十个h@cID
结构以备后用?我感觉有几个语法问题我不太熟悉,这可能解释了我卡住的原因,如果术语不当,请告诉我,我很乐意更改这个问题的标题。谢谢!
library(hexbin)
library(GGally)
library(ggplot2)
set.seed(1)
bindata <- data.frame(
ID = paste0("ID", 1:100),
A = rnorm(100), B = rnorm(100), C = rnorm(100),
D = rnorm(100), E = rnorm(100))
bindata$ID <- as.character(bindata$ID
)
maxVal <- max(abs(bindata[ ,2:6]))
maxRange <- c(-1 * maxVal, maxVal)
listCID <- c()
my_fn <- function(data, mapping, ...){
x <- data[ ,c(as.character(mapping$x))]
y <- data[ ,c(as.character(mapping$y))]
h <- hexbin(x=x, y=y, xbins=5, shape=1, IDs=TRUE,
xbnds=maxRange, ybnds=maxRange)
hexdf <- data.frame(hcell2xy(h), hexID=h@cell, counts=h@count)
listCID <- c(listCID, h@cID)
print(listCID)
p <- ggplot(hexdf, aes(x=x, y=y, fill=counts, hexID=hexID)) +
geom_hex(stat="identity")
p
}
p <- ggpairs(bindata[ ,2:6], lower=list(continuous=my_fn))
p
hexdf <- data.frame(...)
这一行之后,使用attr(hexdf, "cID") <- h@cID
(并删除两行代码中的 listCID)。然后,您可以通过查看单个图表来访问,例如str(p[2,1])
,并使用attr(p[2,1]$data, "cID")
提取。 - user20650