File: jaccard_distance.R

package info (click to toggle)
trinityrnaseq 2.11.0%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 417,528 kB
  • sloc: perl: 48,420; cpp: 17,749; java: 12,695; python: 3,124; sh: 1,030; ansic: 983; makefile: 688; xml: 62
file content (38 lines) | stat: -rw-r--r-- 788 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
jaccard_dist_matrix = function(x, by.row = F) {
    
    x = as.matrix(x);
    
    if (by.row == F) {
        x = t(x)
    }
    
    m = matrix(nrow=nrow(x), ncol=nrow(x));

    diag(m) = 0;
    
    colnames(m) = rownames(x);
    rownames(m) = rownames(x);
    
    # operates by rows.
    for (i in 1:(nrow(x)-1)) {

        message("row (",i,")");
                
        for (j in (i+1):nrow(x)) {
    
            num_same = sum(na.omit(x[i,] == x[j,]));
            
            num_diff = sum(na.omit(x[i,] != x[j,]));

            total = num_same + num_diff;
            jaccard = ifelse (total > 0, 1 - (num_same / (num_same + num_diff)), 1);
            m[i,j] = jaccard;
            m[j,i] = jaccard;
            
            
        }
    }
        
    return(m)
    
}