X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=kruskalwalliscommand.cpp;fp=kruskalwalliscommand.cpp;h=f67fef89f65c53964a354023ed20a7bbc00f3c3f;hb=f954b4d65ce86218f9f7262737f36d1e7faf58d6;hp=263b1c55c1517171f02b70a6d5232277d4ee9861;hpb=013ef8f1507c29ef442e47eb3538ecdd1ef6ddef;p=mothur.git diff --git a/kruskalwalliscommand.cpp b/kruskalwalliscommand.cpp index 263b1c5..f67fef8 100644 --- a/kruskalwalliscommand.cpp +++ b/kruskalwalliscommand.cpp @@ -6,13 +6,6 @@ */ #include "kruskalwalliscommand.h" -//********************************************************************************************************************** -class groupRank { -public: - string group; - double value; - double rank; -}; //********************************************************************************************************************** vector KruskalWallisCommand::setParameters(){ try { @@ -132,12 +125,32 @@ int KruskalWallisCommand::execute(){ //math goes here - int N; - double ss, H; + int N; //= thisLookUp.size(); + double H; double tmp = 0.0; + vector vec; + string group; + int count; + double sum; //merge all groups into a vector //rank function here + assignRank(vec); + + //populate counts and ranSums vectors + for (int i=0;i KruskalWallisCommand::getRank(vector vec) { +void KruskalWallisCommand::assignRank(vector &vec) { try { - multimap rankMap; double rank = 1; - double previous; - double tie = 0.0; - int tiecount = 0; + double numRanks, avgRank; + vector::iterator it, oldit; + + sort (vec.begin(), vec.end(), comparevalue); - sort (vec.begin(), vec.end()); + it = vec.begin(); + + while ( it != vec.end() ) { + j = rank; + oldit = it; + if (!equalvalue(*it, *it+1)) { *it->rank = rank; rank++; it++; } + else { + while(equalrank(*it, *it+1)) { + j = j + (j+1.0); + rank++; + it++; + } + numRanks = double (distance(oldit, it)); + avgRank = j / numRanks; + while(oldit != it) { + *oldit->rank = avgRank; + oldit++; + } + } - for (int i=0;ierrorOut(e, "KruskalWallisCommand", "getRank");