我正在与 UpSetR 进行一些比较,我想保存落入每个交集的元素列表。这可能吗?我在任何地方都找不到...
手动执行(许多列表)会非常乏味,而且由于无论如何它们都是计算出来的,因此无法保存它们令人沮丧
最佳答案
此 (yet) 没有现成的 upSetR 函数.但是,可以提取它:
library(UpSetR)
# Example input as list, expected output is 1 and 5:
listInput <- list(one = c(1, 2, 3, 5, 7, 8, 11, 12, 13),
two = c(1, 2, 4, 5, 10),
three = c(1, 5, 6, 7, 8, 9, 10, 12, 13))
当分配的扰动返回一个值时,该值还包括以下数据:x <- upset(fromList(listInput))
x$New_data
# one two three
# 1 1 1 1
# 2 1 1 0
# 3 1 0 0
# 4 1 1 1
# 5 1 0 1
# 6 1 0 1
# 7 1 0 0
# 8 1 0 1
# 9 1 0 1
# 10 0 1 0
# 11 0 1 1
# 12 0 0 1
# 13 0 0 1
从这里我们可以看到它是第 1 行,在所有三个集合中都找到了第 4 行。项目的顺序是根据它们在列表中出现的顺序定义的,请参阅:x1 <- unlist(listInput, use.names = FALSE)
x1 <- x1[ !duplicated(x1) ]
x1
# [1] 1 2 3 5 7 8 11 12 13 4 10 6 9
现在我们知道来自“New_data”的行号在我们的列表中引用。因此,由于我们有 3 列,过滤总和为 3 的行:x1[ rowSums(x$New_data) == 3 ]
# [1] 1 5
或 我们可以只使用 Reduce:Reduce(intersect, listInput)
# [1] 1 5
关于r - 从翻转对象中提取交叉点列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65027133/