From 5124a68d98b8992f35cf0ffb5299c4b46b55daa9 Mon Sep 17 00:00:00 2001 From: noah Date: Thu, 17 Nov 2022 01:43:20 -0600 Subject: [PATCH] Converting to functions and adding matrix heatmap support --- Schrick-Noah_CS-6643_Lab-9.R | 78 +++++++++++++++++++++++++++++++- Schrick-Noah_CS-6643_Lab-9.docx | Bin 18970 -> 31405 bytes 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/Schrick-Noah_CS-6643_Lab-9.R b/Schrick-Noah_CS-6643_Lab-9.R index b611ca7..cfb6b89 100644 --- a/Schrick-Noah_CS-6643_Lab-9.R +++ b/Schrick-Noah_CS-6643_Lab-9.R @@ -83,7 +83,83 @@ while( (n+m)!=2 ){ m <- m-1 } } # end while - seq_align +#### Part D: Convert to functions +make.alignment.matrices <- function(x_str, y_str, match_score, mismatch_score, + gap_penalty){ + ## Substitution Matrix + dna.letters<-c("A","C","G","T") + num.letters <- length(dna.letters) + S<-data.frame(matrix(0,nrow=num.letters,ncol=num.letters)) # data frame + rownames(S)<-dna.letters; colnames(S)<-dna.letters + for (i in 1:4){ + for (j in 1:4){ + if(dna.letters[i]==dna.letters[j]){ + S[i,j]<- match_score + } + else{ + S[i,j]<- mismatch_score + } + } + } + + ## F Matrix and T Matrix + x <- unlist(strsplit(x_str, "")) + y <- unlist(strsplit(y_str, "")) + x.len <- length(x) + y.len <- length(y) + + Fmat<-matrix(0,nrow=x.len+1,ncol=y.len+1) + Tmat<-Fmat # 0's to start + + rownames(Fmat)<-c("-",x); colnames(Fmat)<-c("-",y) + rownames(Tmat)<-c("-",x); colnames(Tmat)<-c("-",y) + + # create first row and column + Fmat[,1]<- seq(from=0,len=x.len+1,by=-abs(gap_penalty)) + Fmat[1,]<- seq(from=0,len=y.len+1,by=-abs(gap_penalty)) + Tmat[,1]<- rep(2,x.len+1) # 2 means align with a gap in the upper seq + Tmat[1,]<- rep(3,y.len+1) # 3 means align with a gap in the side seq + + ## Building Fmat and Tmat + for (i in 2:nrow(Fmat)){ + for (j in 2:ncol(Fmat)){ # use F recursive rules + test_three_cases <- c(Fmat[i-1, j-1] + S[rownames(Fmat)[i], colnames(Fmat)[j]], # 1 mis/match + Fmat[i-1, j] + gap_penalty, # 2 up-gap + Fmat[i, j-1] + gap_penalty) # 3 left-gap + Fmat[i,j]=max(test_three_cases) + Tmat[i,j]=which.max(test_three_cases) + } + } + final_score <- Fmat[nrow(Fmat),ncol(Fmat)] + return(list(Fmat=Fmat, Tmat=Tmat, score_out=final_score)) +} + +# load new input +x_str2 <- "GATTA" # side sequence +y_str2 <- "GAATTC" # top sequence +match_score <- 2 +mismatch_score <- -1 +gap_penalty <- -2 + +align.list2 <- make.alignment.matrices(x_str2, y_str2, match_score, + mismatch_score, gap_penalty) +align.list2$Fmat +align.list2$Tmat +align.list2$score_out + +if (!require("gplots")) install.packages("gplots") +library(gplots) +Fmat2 <- align.list2$Fmat +col = c("black","blue","red","yellow","green") +breaks = seq(min(Fmat2),max(Fmat2),len=length(col)+1) + +heatmap.2(Fmat2[-1,-1], dendrogram='none', density.info="none", + Rowv=FALSE, Colv=FALSE, trace='none', + breaks = breaks, col = col, + sepwidth=c(0.01,0.01), + sepcolor="black", + colsep=1:ncol(Fmat2), + rowsep=1:nrow(Fmat2)) diff --git a/Schrick-Noah_CS-6643_Lab-9.docx b/Schrick-Noah_CS-6643_Lab-9.docx index f4ef9b9a9e33c7986d925251d02209cebbb26854..9e5b67355c435542dcaaf5241c2b9bd5d2982ce4 100644 GIT binary patch delta 24126 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 delta 11526 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 Jv={wX`#*fa-4Xx*