From e297e98c04950a8063bfc3af2a68883bc30dd28c Mon Sep 17 00:00:00 2001 From: noah Date: Wed, 16 Nov 2022 22:12:25 -0600 Subject: [PATCH] Finalizing Part B: alignment score matrix and traceback matrix initialization --- .Rhistory | 512 ++++++++++++++++++++++++++++++++ Schrick-Noah_CS-6643_Lab-9.R | 18 ++ Schrick-Noah_CS-6643_Lab-9.docx | Bin 17837 -> 18353 bytes 3 files changed, 530 insertions(+) create mode 100644 .Rhistory diff --git a/.Rhistory b/.Rhistory new file mode 100644 index 0000000..d931055 --- /dev/null +++ b/.Rhistory @@ -0,0 +1,512 @@ +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.breaks[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean)/kmin) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1,2)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.breaks[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean)/kmin) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1,2,3)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.breaks[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean)/kmin) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.breaks[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean)/kmin) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +#g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.breaks <- g.hist$breaks # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.breaks[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean)/kmin) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.probs[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean)/kmin) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +alpha.LM +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.probs[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean/kmin)) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1, lwd=5) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.probs[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean/kmin)) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1, lwd=3) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.probs[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean/kmin)) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1, lwd=3) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2, lwd=3) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.probs[nz.probs.mask] +#plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3, lwd=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean/kmin)) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4, lwd=3) +plot(yeast) +hist(yeast) +hist(g.vec) +g.pois +g.mean +alpha.LM +alpha.ML +degree(g) +sort(degree(g)) +sort(degree(g),decreasing=FALSE) +sort(degree(g),decreasing=F) +sort(degree(g),decreasing=false) +sort(degree(g), decreasing = TRUE) +head(sort(degree(g), decreasing = TRUE)) +stddev(degree(g)) +sd(degree(g)) +tail(sort(degree(g), decreasing = TRUE)) +plot(log(g.breaks.clean), log(g.probs.clean)) +# Homework 4 for the University of Tulsa' s CS-7863 Network Theory Course +# Degree Distribution +# Professor: Dr. McKinney, Spring 2022 +# Noah Schrick - 1492657 +library(igraph) +library(igraphdata) +data(yeast) +g <- yeast +g.netname <- "Yeast" +################# Set up Work ################# +g.vec <- degree(g) +g.hist <- hist(g.vec, freq=FALSE, main=paste("Histogram of the", g.netname, +" Network")) +legend("topright", c("Guess", "Poisson", "Least-Squares Fit", +"Max Log-Likelihood"), lty=c(1,2,3,4), col=c("#40B0A6", +"#006CD1", "#E66100", "#D35FB7")) +g.mean <- mean(g.vec) +g.seq <- 0:max(g.vec) # x-axis +################# Guessing Alpha ################# +alpha.guess <- 1.5 +lines(g.seq, g.seq^(-alpha.guess), col="#40B0A6", lty=1, lwd=3) +################# Poisson ################# +g.pois <- dpois(g.seq, g.mean, log=F) +lines(g.seq, g.pois, col="#006CD1", lty=2, lwd=3) +################# Linear model: Least-Squares Fit ################# +g.breaks <- g.hist$breaks[-c(1)] # remove 0 +g.probs <- g.hist$density[-1] # make lengths match +# Need to clean up probabilities that are 0 +nz.probs.mask <- g.probs!=0 +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.probs[nz.probs.mask] +plot(log(g.breaks.clean), log(g.probs.clean)) +g.fit <- lm(log(g.probs.clean)~log(g.breaks.clean)) +summary(g.fit) +alpha.LM <- coef(g.fit)[2] +lines(g.seq, g.seq^(-alpha.LM), col="#E66100", lty=3, lwd=3) +################# Max-Log-Likelihood ################# +n <- length(g.breaks.clean) +kmin <- g.breaks.clean[1] +alpha.ML <- 1 + n/sum(log(g.breaks.clean/kmin)) +alpha.ML +lines(g.seq, g.seq^(-alpha.ML), col="#D35FB7", lty=4, lwd=3) +plot(log(g.breaks.clean), log(g.probs.clean)) +g.breaks.clean <- g.breaks[nz.probs.mask] +g.probs.clean <- g.probs[nz.probs.mask] +plot(log(g.breaks.clean), log(g.probs.clean)) +# Lab 9 for the University of Tulsa's CS-6643 Bioinformatics Course +# Pairwise Sequence Alignment with Dynamic Programming +# Professor: Dr. McKinney, Fall 2022 +# Noah L. Schrick - 1492657 +## Set Working Directory to file directory - RStudio approach +setwd(dirname(rstudioapi::getActiveDocumentContext()$path)) +#### Part A: Specifying the Input +## Score Rules and Seqs +x_str <- "ATAC" # side sequence +y_str <- "GTGTAC" # top sequence +match_score <- 3 +mismatch_score <- -1 +gap_penalty <- -4 +## 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 +} +} +} +len(S) +size(S) +nrows(S) +nrow(S) +col(S) +S +S[A][T] +S[A,T] +S +S[A] +S.A +S.at(A) +S[1.1] +S[1,1] +S["A", "T"] +dna.letters("A") +dna.letters +?index() +match("A", dna.letters) +match("T", dna.letters) +S[1,4] diff --git a/Schrick-Noah_CS-6643_Lab-9.R b/Schrick-Noah_CS-6643_Lab-9.R index f1cb545..6ed1de2 100644 --- a/Schrick-Noah_CS-6643_Lab-9.R +++ b/Schrick-Noah_CS-6643_Lab-9.R @@ -31,3 +31,21 @@ for (i in 1:4){ } } +#### Part B: Alignment Score Matrix (F) and Traceback Matrix (T) +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 + diff --git a/Schrick-Noah_CS-6643_Lab-9.docx b/Schrick-Noah_CS-6643_Lab-9.docx index 8c8a173d4c6d6577f6cfecfa2e0b808e5e0b6d83..cb449eaa50a0669972f48604428aa4d78cf952a4 100644 GIT binary patch delta 13046 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�b({Jb$%O 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 delta 12592 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 VrWBHd8WPlm3~{8-5JG=d|36Ux@hboT