sdg*_*wer 3 statistics combinations r
我最近一直在与R打交道,我遇到了一个有趣的问题.我必须绘制9个单列数据集的所有可能的维恩图(让我们将它们命名为df1 ... df9).我正在使用库(gplots),并且venn带有示例输入的代码片段是:
venn(list(df1,df2,df3,df4))
Run Code Online (Sandbox Code Playgroud)
问题是:如何生成这九个数据集的所有可能子集(总共有126个 - 计算过的使用过的梳子函数.),并将它们导出到列表中,这可以输入到venn中.例如:(df1,df2),(df5,df4),(df3,df5,df8)...在这里,我将遍历所有选项并绘制每个选项的维恩图.谢谢你的任何提示.
让我们从一个可重现的例子开始:
# 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"
# ...
Run Code Online (Sandbox Code Playgroud)
该venn功能不支持超过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))
Run Code Online (Sandbox Code Playgroud)
venns现在包含所有372个维恩图对象.例如,您可以绘制特定的一个plot(venns[[100]])

如果你真的想绘制所有的维恩图,你可能会做以下事情:
apply(subs, 1, function(x) {
png(paste0("venn_", paste(which(x), collapse="_"), ".png"))
venn(dfs[x])
dev.off()
})
Run Code Online (Sandbox Code Playgroud)
这将创建包含维恩图的372个图像文件,根据包含的集合命名.