]> git.donarmstrong.com Git - ape.git/blob - R/dist.gene.R
current 2.1 release
[ape.git] / R / dist.gene.R
1 ## dist.gene.R (2002-08-28)
2
3 ##   Pairwise Distances from Genetic Data
4
5 ## Copyright 2002 Emmanuel Paradis
6
7 ## This file is part of the R-package `ape'.
8 ## See the file ../COPYING for licensing issues.
9
10 dist.gene.pairwise <- function(x, variance = FALSE)
11 {
12     if (is.data.frame(x)) x <- as.matrix(x)
13     L <- ncol(x)
14     n <- nrow(x)
15     D <- matrix(NA, n, n)
16     diag(D) <- 0
17     for (i in 1:(n - 1)) {
18         for (j in (i + 1):n) {
19             D[i, j] <- D[j, i] <- L - sum(x[i, ] == x[j, ])
20         }
21     }
22     if (!is.null(rownames(x))) rownames(D) <- colnames(D) <- rownames(x)
23     if (variance) {
24         var.D <- D * (L - D) / L
25         return(list(distances = D, variance = var.D))
26     }
27     else return(D)
28 }
29
30 dist.gene.percentage <- function(x, variance = FALSE)
31 {
32     L <- ncol(x)
33     D <- dist.gene.pairwise(x) / L
34     if (variance) {
35         var.D <- D * (1 - D) / L
36         return(list(pairwise.distances = D, variance = var.D))
37     }
38     else return(D)
39 }
40
41 dist.gene <- function(x, method = "pairwise", variance = FALSE)
42 {
43     if (method == "pairwise")
44       return(dist.gene.pairwise(x, variance = variance))
45     if (method == "percentage")
46       return(dist.gene.percentage(x, variance = variance))
47 }