Подсчитать общее количество веток в дереве - PullRequest
0 голосов
/ 29 мая 2018

У меня есть следующая матрица:

> 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 Ответ

0 голосов
/ 29 мая 2018

Вот способ сделать все это в одной строке:

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

Как указано в комментариях, похоже, ваша проблема в том, что вы не включили уникальные элементы 1-го столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...