From a7291a9e79f94af2325953add77b8801d2302b79 Mon Sep 17 00:00:00 2001 From: Waldir Leoncio Date: Thu, 19 Nov 2020 08:45:50 +0100 Subject: [PATCH] Refactoring --- R/greedyMix.R | 501 +------------------------------------------------- R/matlab2r.R | 22 ++- 2 files changed, 21 insertions(+), 502 deletions(-) diff --git a/R/greedyMix.R b/R/greedyMix.R index 7b0004e..2300494 100644 --- a/R/greedyMix.R +++ b/R/greedyMix.R @@ -382,27 +382,6 @@ greedyMix <- function( } } -# %------------------------------------------------------------------------------------- - -# function [partitionSummary, added] = addToSummary(logml, partitionSummary, worstIndex) -# % Tiedet��n, ett?annettu logml on isompi kuin huonoin arvo -# % partitionSummary taulukossa. Jos partitionSummary:ss?ei viel?ole -# % annettua logml arvoa, niin lis�t��n worstIndex:in kohtaan uusi logml ja -# % nykyist?partitiota vastaava nclusters:in arvo. Muutoin ei tehd?mit��n. - -# apu = find(abs(partitionSummary(:,2)-logml)<1e-5); -# if isempty(apu) -# % Nyt l�ydetty partitio ei ole viel?kirjattuna summaryyn. -# global PARTITION; -# npops = length(unique(PARTITION)); -# partitionSummary(worstIndex,1) = npops; -# partitionSummary(worstIndex,2) = logml; -# added = 1; -# else -# added = 0; -# end - - # %-------------------------------------------------------------------------- @@ -429,408 +408,7 @@ greedyMix <- function( # har=find(CDF>slump); # svar=har(1); - -# %------------------------------------------------------------------------------------- - - -# function updateGlobalVariables(ind, i2, rowsFromInd, diffInCounts, ... -# adjprior, priorTerm) -# % Suorittaa globaalien muuttujien muutokset, kun yksil?ind -# % on siirret��n koriin i2. - -# global PARTITION; -# global COUNTS; -# global SUMCOUNTS; -# global POP_LOGML; - -# i1 = PARTITION(ind); -# PARTITION(ind)=i2; - -# COUNTS(:,:,i1) = COUNTS(:,:,i1) - diffInCounts; -# COUNTS(:,:,i2) = COUNTS(:,:,i2) + diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:) - sum(diffInCounts); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:) + sum(diffInCounts); - -# POP_LOGML([i1 i2]) = computePopulationLogml([i1 i2], adjprior, priorTerm); - - -# %--------------------------------------------------------------------------------- - - -# function updateGlobalVariables2( ... -# i1, i2, rowsFromInd, diffInCounts, adjprior, priorTerm); -# % Suorittaa globaalien muuttujien muutokset, kun kaikki -# % korissa i1 olevat yksil�t siirret��n koriin i2. - -# global PARTITION; -# global COUNTS; -# global SUMCOUNTS; -# global POP_LOGML; - -# inds = find(PARTITION==i1); -# PARTITION(inds) = i2; - -# COUNTS(:,:,i1) = COUNTS(:,:,i1) - diffInCounts; -# COUNTS(:,:,i2) = COUNTS(:,:,i2) + diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:) - sum(diffInCounts); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:) + sum(diffInCounts); - -# POP_LOGML(i1) = 0; -# POP_LOGML(i2) = computePopulationLogml(i2, adjprior, priorTerm); - - -# %------------------------------------------------------------------------------------ - - -# function updateGlobalVariables3(muuttuvat, rowsFromInd, diffInCounts, ... -# adjprior, priorTerm, i2); -# % Suorittaa globaalien muuttujien p�ivitykset, kun yksil�t 'muuttuvat' -# % siirret��n koriin i2. Ennen siirtoa yksil�iden on kuuluttava samaan -# % koriin. - -# global PARTITION; -# global COUNTS; -# global SUMCOUNTS; -# global POP_LOGML; - -# i1 = PARTITION(muuttuvat(1)); -# PARTITION(muuttuvat) = i2; - -# COUNTS(:,:,i1) = COUNTS(:,:,i1) - diffInCounts; -# COUNTS(:,:,i2) = COUNTS(:,:,i2) + diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:) - sum(diffInCounts); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:) + sum(diffInCounts); - -# POP_LOGML([i1 i2]) = computePopulationLogml([i1 i2], adjprior, priorTerm); - - -# %---------------------------------------------------------------------- - - -# function inds = returnInOrder(inds, pop, rowsFromInd, data, adjprior, priorTerm) -# % Palauttaa yksil�t j�rjestyksess?siten, ett?ensimm�isen?on -# % se, jonka poistaminen populaatiosta pop nostaisi logml:n -# % arvoa eniten. - -# global COUNTS; global SUMCOUNTS; -# ninds = length(inds); -# apuTaulu = [inds, zeros(ninds,1)]; - -# for i=1:ninds -# ind = inds(i); -# rows = (ind-1)*rowsFromInd+1 : ind*rowsFromInd; -# diffInCounts = computeDiffInCounts(rows, size(COUNTS,1), size(COUNTS,2), data); -# diffInSumCounts = sum(diffInCounts); - -# COUNTS(:,:,pop) = COUNTS(:,:,pop)-diffInCounts; -# SUMCOUNTS(pop,:) = SUMCOUNTS(pop,:)-diffInSumCounts; -# apuTaulu(i, 2) = computePopulationLogml(pop, adjprior, priorTerm); -# COUNTS(:,:,pop) = COUNTS(:,:,pop)+diffInCounts; -# SUMCOUNTS(pop,:) = SUMCOUNTS(pop,:)+diffInSumCounts; -# end -# apuTaulu = sortrows(apuTaulu,2); -# inds = apuTaulu(ninds:-1:1,1); - -# %------------------------------------------------------------------------------------ - - -# function [muutokset, diffInCounts] = ... -# laskeMuutokset(ind, rowsFromInd, data, adjprior, priorTerm) -# % Palauttaa npops*1 taulun, jossa i:s alkio kertoo, mik?olisi -# % muutos logml:ss? mik�li yksil?ind siirret��n koriin i. -# % diffInCounts on poistettava COUNTS:in siivusta i1 ja lis�tt�v? -# % COUNTS:in siivuun i2, mik�li muutos toteutetaan. - -# global COUNTS; global SUMCOUNTS; -# global PARTITION; global POP_LOGML; -# npops = size(COUNTS,3); -# muutokset = zeros(npops,1); - -# i1 = PARTITION(ind); -# i1_logml = POP_LOGML(i1); - -# rows = (ind-1)*rowsFromInd+1 : ind*rowsFromInd; -# diffInCounts = computeDiffInCounts(rows, size(COUNTS,1), size(COUNTS,2), data); -# diffInSumCounts = sum(diffInCounts); - -# COUNTS(:,:,i1) = COUNTS(:,:,i1)-diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:)-diffInSumCounts; -# new_i1_logml = computePopulationLogml(i1, adjprior, priorTerm); -# COUNTS(:,:,i1) = COUNTS(:,:,i1)+diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:)+diffInSumCounts; - -# i2 = [1:i1-1 , i1+1:npops]; -# i2_logml = POP_LOGML(i2); - -# COUNTS(:,:,i2) = COUNTS(:,:,i2)+repmat(diffInCounts, [1 1 npops-1]); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:)+repmat(diffInSumCounts,[npops-1 1]); -# new_i2_logml = computePopulationLogml(i2, adjprior, priorTerm); -# COUNTS(:,:,i2) = COUNTS(:,:,i2)-repmat(diffInCounts, [1 1 npops-1]); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:)-repmat(diffInSumCounts,[npops-1 1]); - -# muutokset(i2) = new_i1_logml - i1_logml ... -# + new_i2_logml - i2_logml; - - -# %------------------------------------------------------------------------------------ - - -# function [muutokset, diffInCounts] = laskeMuutokset2( ... -# i1, rowsFromInd, data, adjprior, priorTerm); -# % Palauttaa npops*1 taulun, jossa i:s alkio kertoo, mik?olisi -# % muutos logml:ss? mik�li korin i1 kaikki yksil�t siirret��n -# % koriin i. - -# global COUNTS; global SUMCOUNTS; -# global PARTITION; global POP_LOGML; -# npops = size(COUNTS,3); -# muutokset = zeros(npops,1); - -# i1_logml = POP_LOGML(i1); - -# inds = find(PARTITION==i1); -# ninds = length(inds); - -# if ninds==0 -# diffInCounts = zeros(size(COUNTS,1), size(COUNTS,2)); -# return; -# end - -# rows = computeRows(rowsFromInd, inds, ninds); - -# diffInCounts = computeDiffInCounts(rows, size(COUNTS,1), size(COUNTS,2), data); -# diffInSumCounts = sum(diffInCounts); - -# COUNTS(:,:,i1) = COUNTS(:,:,i1)-diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:)-diffInSumCounts; -# new_i1_logml = computePopulationLogml(i1, adjprior, priorTerm); -# COUNTS(:,:,i1) = COUNTS(:,:,i1)+diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:)+diffInSumCounts; - -# i2 = [1:i1-1 , i1+1:npops]; -# i2_logml = POP_LOGML(i2); - -# COUNTS(:,:,i2) = COUNTS(:,:,i2)+repmat(diffInCounts, [1 1 npops-1]); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:)+repmat(diffInSumCounts,[npops-1 1]); -# new_i2_logml = computePopulationLogml(i2, adjprior, priorTerm); -# COUNTS(:,:,i2) = COUNTS(:,:,i2)-repmat(diffInCounts, [1 1 npops-1]); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:)-repmat(diffInSumCounts,[npops-1 1]); - -# muutokset(i2) = new_i1_logml - i1_logml ... -# + new_i2_logml - i2_logml; - - - -# %------------------------------------------------------------------------------------ - - -# function muutokset = laskeMuutokset3(T2, inds2, rowsFromInd, ... -# data, adjprior, priorTerm, i1) -# % Palauttaa length(unique(T2))*npops taulun, jossa (i,j):s alkio -# % kertoo, mik?olisi muutos logml:ss? jos populaation i1 osapopulaatio -# % inds2(find(T2==i)) siirret��n koriin j. - -# global COUNTS; global SUMCOUNTS; -# global PARTITION; global POP_LOGML; -# npops = size(COUNTS,3); -# npops2 = length(unique(T2)); -# muutokset = zeros(npops2, npops); - -# i1_logml = POP_LOGML(i1); - -# for pop2 = 1:npops2 -# inds = inds2(find(T2==pop2)); -# ninds = length(inds); -# if ninds>0 -# rows = computeRows(rowsFromInd, inds, ninds); -# diffInCounts = computeDiffInCounts(rows, size(COUNTS,1), size(COUNTS,2), data); -# diffInSumCounts = sum(diffInCounts); - -# COUNTS(:,:,i1) = COUNTS(:,:,i1)-diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:)-diffInSumCounts; -# new_i1_logml = computePopulationLogml(i1, adjprior, priorTerm); -# COUNTS(:,:,i1) = COUNTS(:,:,i1)+diffInCounts; -# SUMCOUNTS(i1,:) = SUMCOUNTS(i1,:)+diffInSumCounts; - -# i2 = [1:i1-1 , i1+1:npops]; -# i2_logml = POP_LOGML(i2)'; - -# COUNTS(:,:,i2) = COUNTS(:,:,i2)+repmat(diffInCounts, [1 1 npops-1]); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:)+repmat(diffInSumCounts,[npops-1 1]); -# new_i2_logml = computePopulationLogml(i2, adjprior, priorTerm)'; -# COUNTS(:,:,i2) = COUNTS(:,:,i2)-repmat(diffInCounts, [1 1 npops-1]); -# SUMCOUNTS(i2,:) = SUMCOUNTS(i2,:)-repmat(diffInSumCounts,[npops-1 1]); - -# muutokset(pop2,i2) = new_i1_logml - i1_logml ... -# + new_i2_logml - i2_logml; -# end -# end - - -# %------------------------------------------------------------------------------------ - -# function muutokset = laskeMuutokset5(inds, rowsFromInd, data, adjprior, ... -# priorTerm, i1, i2) - -# % Palauttaa length(inds)*1 taulun, jossa i:s alkio kertoo, mik?olisi -# % muutos logml:ss? mik�li yksil?i vaihtaisi koria i1:n ja i2:n v�lill? - -# global COUNTS; global SUMCOUNTS; -# global PARTITION; global POP_LOGML; - -# ninds = length(inds); -# muutokset = zeros(ninds,1); - -# i1_logml = POP_LOGML(i1); -# i2_logml = POP_LOGML(i2); - -# for i = 1:ninds -# ind = inds(i); -# if PARTITION(ind)==i1 -# pop1 = i1; %mist? -# pop2 = i2; %mihin -# else -# pop1 = i2; -# pop2 = i1; -# end -# rows = (ind-1)*rowsFromInd+1 : ind*rowsFromInd; -# diffInCounts = computeDiffInCounts(rows, size(COUNTS,1), size(COUNTS,2), data); -# diffInSumCounts = sum(diffInCounts); - -# COUNTS(:,:,pop1) = COUNTS(:,:,pop1)-diffInCounts; -# SUMCOUNTS(pop1,:) = SUMCOUNTS(pop1,:)-diffInSumCounts; -# COUNTS(:,:,pop2) = COUNTS(:,:,pop2)+diffInCounts; -# SUMCOUNTS(pop2,:) = SUMCOUNTS(pop2,:)+diffInSumCounts; - -# PARTITION(ind) = pop2; - -# new_logmls = computePopulationLogml([i1 i2], adjprior, priorTerm); - -# muutokset(i) = sum(new_logmls); - -# COUNTS(:,:,pop1) = COUNTS(:,:,pop1)+diffInCounts; -# SUMCOUNTS(pop1,:) = SUMCOUNTS(pop1,:)+diffInSumCounts; -# COUNTS(:,:,pop2) = COUNTS(:,:,pop2)-diffInCounts; -# SUMCOUNTS(pop2,:) = SUMCOUNTS(pop2,:)-diffInSumCounts; - -# PARTITION(ind) = pop1; -# end - -# muutokset = muutokset - i1_logml - i2_logml; - -# %-------------------------------------------------------------------------- - - - -# function diffInCounts = computeDiffInCounts(rows, max_noalle, nloci, data) -# % Muodostaa max_noalle*nloci taulukon, jossa on niiden alleelien -# % lukum��r�t (vastaavasti kuin COUNTS:issa), jotka ovat data:n -# % riveill?rows. - -# diffInCounts = zeros(max_noalle, nloci); -# for i=rows -# row = data(i,:); -# notEmpty = find(row>=0); - -# if length(notEmpty)>0 -# diffInCounts(row(notEmpty) + (notEmpty-1)*max_noalle) = ... -# diffInCounts(row(notEmpty) + (notEmpty-1)*max_noalle) + 1; -# end -# end - - - -# %------------------------------------------------------------------------------------ - - -# function popLogml = computePopulationLogml(pops, adjprior, priorTerm) -# % Palauttaa length(pops)*1 taulukon, jossa on laskettu korikohtaiset -# % logml:t koreille, jotka on m��ritelty pops-muuttujalla. - -# global COUNTS; -# global SUMCOUNTS; -# x = size(COUNTS,1); -# y = size(COUNTS,2); -# z = length(pops); - -# popLogml = ... -# squeeze(sum(sum(reshape(... -# gammaln(repmat(adjprior,[1 1 length(pops)]) + COUNTS(:,:,pops)) ... -# ,[x y z]),1),2)) - sum(gammaln(1+SUMCOUNTS(pops,:)),2) - priorTerm; - - -# %----------------------------------------------------------------------------------- - - -# function npops = poistaTyhjatPopulaatiot(npops) -# % Poistaa tyhjentyneet populaatiot COUNTS:ista ja -# % SUMCOUNTS:ista. P�ivitt�� npops:in ja PARTITION:in. - -# global COUNTS; -# global SUMCOUNTS; -# global PARTITION; - -# notEmpty = find(any(SUMCOUNTS,2)); -# COUNTS = COUNTS(:,:,notEmpty); -# SUMCOUNTS = SUMCOUNTS(notEmpty,:); - -# for n=1:length(notEmpty) -# apu = find(PARTITION==notEmpty(n)); -# PARTITION(apu)=n; -# end -# npops = length(notEmpty); - - -# %---------------------------------------------------------------------------------- -# %Seuraavat kolme funktiota liittyvat alkupartition muodostamiseen. - -# function initial_partition=admixture_initialization(data_matrix,nclusters,Z) -# size_data=size(data_matrix); -# nloci=size_data(2)-1; -# n=max(data_matrix(:,end)); -# T=cluster_own(Z,nclusters); -# initial_partition=zeros(size_data(1),1); -# for i=1:n -# kori=T(i); -# here=find(data_matrix(:,end)==i); -# for j=1:length(here) -# initial_partition(here(j),1)=kori; -# end -# end - -# function T = cluster_own(Z,nclust) -# true=logical(1); -# false=logical(0); -# maxclust = nclust; -# % Start of algorithm -# m = size(Z,1)+1; -# T = zeros(m,1); -# % maximum number of clusters based on inconsistency -# if m <= maxclust -# T = (1:m)'; -# elseif maxclust==1 -# T = ones(m,1); -# else -# clsnum = 1; -# for k = (m-maxclust+1):(m-1) -# i = Z(k,1); % left tree -# if i <= m % original node, no leafs -# T(i) = clsnum; -# clsnum = clsnum + 1; -# elseif i < (2*m-maxclust+1) % created before cutoff, search down the tree -# T = clusternum(Z, T, i-m, clsnum); -# clsnum = clsnum + 1; -# end -# i = Z(k,2); % right tree -# if i <= m % original node, no leafs -# T(i) = clsnum; -# clsnum = clsnum + 1; -# elseif i < (2*m-maxclust+1) % created before cutoff, search down the tree -# T = clusternum(Z, T, i-m, clsnum); -# clsnum = clsnum + 1; -# end -# end -# end +# %---------------------------------------------------------------------------------- # function T = clusternum(X, T, k, c) # m = size(X,1)+1; @@ -885,79 +463,4 @@ greedyMix <- function( # end # end -# Z=linkage(distances'); - - - -# %---------------------------------------------------------------------------------------- - -# function logml=computeLogml(counts, sumcounts, noalle, data, rowsFromInd) -# nloci = size(counts,2); -# npops = size(counts,3); -# adjnoalle = zeros(max(noalle),nloci); -# for j=1:nloci -# adjnoalle(1:noalle(j),j)=noalle(j); -# if (noalle(j) 1)); -# end \ No newline at end of file +# Z=linkage(distances'); \ No newline at end of file diff --git a/R/matlab2r.R b/R/matlab2r.R index f69dcb8..0b6cb25 100644 --- a/R/matlab2r.R +++ b/R/matlab2r.R @@ -7,16 +7,32 @@ #' @importFrom utils write.table #' @export matlab2r <- function(filename, saveOutput = FALSE) { - # Verification + + # ======================================================== # + # Verification # + # ======================================================== # if (!file.exists(filename)) stop("File not found") - # Reading file into R + + # ======================================================== # + # Reading file into R # + # ======================================================== # txt <- readLines(filename) - # Replacing text + + # ======================================================== # + # Replacing text # + # ======================================================== # + + # Function header ---------------------------------------- # txt <- gsub( pattern = "function (.+)\\s+=\\s*(.+)\\((.+)\\)", replacement = "\\2 <- function(\\3) { return(\\1)", x = txt ) + txt <- gsub( + pattern = "function (.+)\\((.+)\\)", + replacement = "\\1 <- function(\\2) {", + x = txt + ) # txt <- gsub("\\%\\s*(\\w+)", "# \\1", txt) txt <- gsub(";", "", txt) txt <- gsub("for (.+)=(.+)", "for (\\1 in \\2) {", txt)