代码之家  ›  专栏  ›  技术社区  ›  Mark

计算树中的分支总数

  •  0
  • Mark  · 技术社区  · 7 年前

    我有以下矩阵:

    > M
         [,1] [,2] [,3] [,4]
    [1,]    1    1    3    2
    [2,]    2    2    1    1
    [3,]    3    2    3    1
    [4,]    2    2    2    2
    [5,]    1    1    1    1
    [6,]    3    2    3    2
    [7,]    1    1    3    1
    [8,]    2    1    1    1
    

    文件txt中的每一行有四个位置,由空格分隔,代表树的路径。树由一个根节点和构成层次结构的其他节点的级别组成:第一级和第三级可以有三个节点(1、2或3);其余位置只能采用两个值:1或2。

    然后,前面的示例描述的树如下:

    enter image description here

    我会计算树上的树枝总数。例如,上面描述的树总共有21个分支。

    我的解决方案如下:

    nrow(unique( M[ , 1:2 ] ))+nrow(unique( M[ , 1:3 ] ))+nrow(unique( M[ , 1:4 ] ))
    

    但它返回18…

    1 回复  |  直到 7 年前
        1
  •  1
  •   Gregor Thomas    7 年前

    以下是一种在一行中完成所有操作的方法:

    sum(sapply(1:ncol(M), function(x) nrow(unique(M[, 1:x, drop = FALSE]))))
    

    正如评论中指出的,您的问题似乎是您没有包含唯一的第一列元素。