conditionalEntropy <- function( graph ) { # graph is a 2 or 3 column dataframe if (ncol(graph) == 2 ) { names(graph) <- c("from","to") graph$weight <- 1 } else if (ncol(graph) == 3) names(graph) <- c("from","to","weight") max <- length(rle(paste(graph$from, graph$to))$values) total <- sum(graph$weight) entropy <- data.frame(H = 0, Hmax = 0); entropy$H <- sum(graph$weight/total * log(graph$weight/total) / log(2)) * -1 entropy$Hmax <- log(max * (max-1))/log(2) return(entropy) }