首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数calculate.overlap来自VennDiagram包

函数calculate.overlap来自VennDiagram包
EN

Stack Overflow用户
提问于 2016-02-17 17:30:50
回答 1查看 2.7K关注 0票数 0

编辑:我有下面的两个列表。它们的写法与所呈现的完全相同:

代码语言:javascript
复制
x1 <- list()
x1$A <- as.character(c("Per_36","Cent","CeM","vDG","LAVL","RSGd"))
x1$B <- as.character(c("vCA1","DLE","Per_36","vDG","DIE","Per_35"))
x1$C <- as.character(c("vCA1","Cg1","LAVL", "RSGc", "RSGd","Per_35","Per_36"))
x1$D <- as.character(c("Por","Cg1","RSGc","LAVL","Per_35","RSGd","Per_36"))

x2 <- list()
x2$A <- as.character(c("Per_36","Per_35","Por","vCA1","BLV","Cent","PrL"))
x2$B <- as.character(c("BLA","VIE","BLV","Por","Cent","Ment","dCA1"))
x2$C <- as.character(c("dDG","Per_36","CeM","Per_35","BLV","dCA1","PrL","IL"))
x2$D <- as.character(c("CeC","RSGb","CeL","dDG","CeM","dCA1","PrL","IL"))

它们是以完全相同的方式产生的。当我从calculate.overlap中的VennDiagram包运行函数x1时,我得到了一个很好的绘图,并且函数运行得很完美。但是当我在x2中运行时,我会得到一个空列表,这显然是错误的。我就是看不出是怎么回事。有什么帮助吗?

代码语言:javascript
复制
overlapx1
$a6
[1] "Per_36"

$a12
character(0)

$a11
character(0)

$a5
[1] "LAVL" "RSGd"

$a7
[1] "Per_35"

$a15
[1] "vDG"

$a4
character(0)

$a10
character(0)

$a13
[1] "vCA1"

$a8
character(0)

$a2
[1] "Cg1"  "RSGc"

$a9
[1] "Cent" "CeM" 

$a14
[1] "DLE" "DIE"

$a1
character(0)

$a3
[1] "Por"

当我运行overlapx2 <- calculate.overlap(x2)时,我得到一个与list = character(0)的所有向量相等的列表

编辑2:到包的链接在https://cran.r-project.org/web/packages/VennDiagram/index.html下面

和手册https://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf

作者是陈汉波,但作者是保罗·布特罗斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-19 15:10:49

我在函数中挖掘了代码并发现了错误。

我将只发布一个代码示例,这些代码可以作为我自己问题的答案和解决方案。

代码语言:javascript
复制
calculate.overlap
function (x) 
{
    if (1 == length(x)) {
        overlap <- x
    }
    else if (2 == length(x)) {
        overlap <- list(a1 = x[[1]], a2 = x[[2]], a3 = intersect(x[[1]], 
            x[[2]]))
    }
    else if (3 == length(x)) {
        A <- x[[1]]
        B <- x[[2]]
        C <- x[[3]]
        nab <- intersect(A, B)
        nbc <- intersect(B, C)
        nac <- intersect(A, C)
        nabc <- intersect(nab, C)
        a5 = nabc
        a2 = nab[-which(nab %in% a5)]
        a4 = nac[-which(nac %in% a5)]
        a6 = nbc[-which(nbc %in% a5)]
        a1 = A[-which(A %in% c(a2, a4, a5))]
        a3 = B[-which(B %in% c(a2, a5, a6))]
        a7 = C[-which(C %in% c(a4, a5, a6))]
        overlap <- list(a5 = a5, a2 = a2, a4 = a4, a6 = a6, a1 = a1, 
            a3 = a3, a7 = a7)
    }
#. Purposely took the length(x) == 4 and 5 to shorten it. 
#. rationale is the same ans is simple
#.
    else {
        flog.error("Invalid size of input object", name = "VennDiagramLogger")
        stop("Invalid size of input object")
    }
}
<environment: namespace:VennDiagram>

被窃听的操作是下面突出显示的命令:

代码语言:javascript
复制
a2 = nab[**-which(**nab %in% a5)]

把它替换成

代码语言:javascript
复制
a2 = nab[! nab %in% a5]

做得很好。但是它必须在函数中的所有操作中完成。

我将尝试联系包的作者,看看他是否可以在未来更新它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35463684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档