【问题标题】:Extract intersection list from upset object从扰乱对象中提取交集列表
【发布时间】:2021-03-09 15:13:06
【问题描述】:

我正在与 UpSetR 进行一些比较,我想保存属于每个交叉点的元素列表。这可能吗?我在任何地方都找不到它...

手动操作会很乏味(很多列表),而且因为它们是经过计算的,所以无法保存它们令人沮丧

【问题讨论】:

  • 也许这篇文章能帮上忙 - stackoverflow.com/a/41234802/680068
  • 你不是定义情节的人吗?
  • @zx8754 谢谢,这似乎很有帮助,我在 dplyr 中尝试做这件事时很纠结我不希望它是复杂的实现,无论如何都要计算所有的交叉点..我猜只需要一个句柄来获取它们.. @Abdessabour Mtk 我不确定我明白你的意思,但是在你定义了你想要比较的集合,所有的交叉点都在引擎盖下完成并直接绘制..这就是它很方便的原因:)
  • 如果您执行x <- upset(...),它会返回用于绘图的数据。我不能轻易地看到你在那个 x 对象中的信息。
  • 您可以随时在github.com/hms-dbmi/UpSetR/issues提出“功能请求”

标签: r set-intersection set-operations upsetr


【解决方案1】:

这个(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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2010-11-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多