我最近一直在处理R,我遇到了一个有趣的问题。我必须绘制9个单列数据集的所有可能的venn图(让我们将它们命名为df1...df9)。我使用的是库(Gplots),输入示例的venn
代码如下:
venn(list(df1,df2,df3,df4))
问题是:我如何生成这九个数据集的所有可能子集(总共有126个计算使用的梳状函数),并将它们导出到一个列表中,这个列表可以输入到venn中。例如:(df1,df2),(df5,df4),(df3,df5,df8)。。。在这里,我将遍历所有选项,并为每个选项绘制venn图。谢谢你的暗示。
发布于 2015-04-20 12:32:38
让我们从一个可重复的例子开始:
# Sample data (9 15-element subsets of the letters stored in a list)
set.seed(144)
(dfs <- replicate(9, sample(letters, 15), simplify=FALSE))
# [[1]]
# [1] "b" "r" "y" "l" "g" "n" "a" "u" "z" "s" "j" "c" "h" "x" "m"
#
# [[2]]
# [1] "b" "n" "m" "t" "i" "f" "a" "l" "k" "u" "o" "c" "g" "v" "p"
# ...
venn
函数不支持5组以上的venn图,而一组的venn图非常乏味。因此,我将限制为有2到5个子集的子集:
# Get all subsets with 2-5 elements
subs <- do.call(expand.grid, replicate(length(dfs), c(F, T), simplify=F))
subs <- subs[rowSums(subs) %in% 2:5,]
venns <- apply(subs, 1, function(x) venn(dfs[x], show.plot=F))
venns
现在包含所有372个venn关系图对象。例如,您可以用plot(venns[[100]])
绘制一个特定的
如果您真的想绘制所有venn图,您可以这样做:
apply(subs, 1, function(x) {
png(paste0("venn_", paste(which(x), collapse="_"), ".png"))
venn(dfs[x])
dev.off()
})
这将创建372个图像文件,其中包含根据所包含的集合命名的venn图。
https://stackoverflow.com/questions/29757400
复制相似问题