library(ggplot2)
library(seqinr)
library(msa)
## Loading required package: Biostrings
## Loading required package: BiocGenerics
##
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:stats':
##
## IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
##
## anyDuplicated, aperm, append, as.data.frame, basename, cbind,
## colnames, dirname, do.call, duplicated, eval, evalq, Filter, Find,
## get, grep, grepl, intersect, is.unsorted, lapply, Map, mapply,
## match, mget, order, paste, pmax, pmax.int, pmin, pmin.int,
## Position, rank, rbind, Reduce, rownames, sapply, setdiff, sort,
## table, tapply, union, unique, unsplit, which.max, which.min
## Loading required package: S4Vectors
## Loading required package: stats4
##
## Attaching package: 'S4Vectors'
## The following objects are masked from 'package:base':
##
## expand.grid, I, unname
## Loading required package: IRanges
## Loading required package: XVector
## Loading required package: GenomeInfoDb
##
## Attaching package: 'Biostrings'
## The following object is masked from 'package:seqinr':
##
## translate
## The following object is masked from 'package:base':
##
## strsplit
seqinr::choosebank("genbank")
sars2 <- seqinr::query("sars2", "AC=MN908947")
covid19 <- unlist(seqinr::getSequence(sars2))
rho1 <- seqinr::rho(covid19) # guardamos el resultado de rho en un objeto
rho1 <- rho1 - 1 # le restamos 1
rho1 <- as.data.frame(rho1) # convertimos el objeto en data frame para que este en dos columnas
ggplot(data = rho1, aes(fill=Var1, y=Freq, x=Var1)) +
geom_bar(position="stack", stat="identity") +
labs(title = "FRECUENCIA RELATIVA DE DINUCLEOTIDOS",
subtitle = "SARS-CoV-2 genoma",
x = "Dinucleotido",
y = "Frecuencia relativa",
caption = Sys.Date()) +
theme(legend.position = "none")
Como podemos ver, es muy evidente que el dinucleotido “cg” esta subrepresentado, y eso significa que la frecuencia en la que ocurre este dinucleotido es mucho menos que la mitad de lo que se espera. Esto sugiere alguna presión evolutiva que evita la formación de este dinucleótido. Por otro lado, el dinucleótido “tg” está sobrerepresentado.
Ahora vamos a analizar la presencia de los codones. Como sabemos, el
código genético se rige por una codificación de tres bases nitrogenadas
= un aminåcido. Para ello vamos a modificar el parámetro
wordsize=3
, para que haga el análisis en trinucleótidos y
no en dinucleótidos.
rho2 <- seqinr::rho(covid19, wordsize=3)
rho2 <- rho2 - 1 # le restamos 1
rho2 <- as.data.frame(rho2) # convertimos el objeto en data frame para que este en dos columnas
nrow(rho2)
## [1] 64
Como la cantidad de filas es grande y lo que nos intersa saber es que
trinucleotidos están sobre- e subrrepresentados, entonces vamos
seleccionar solo los seis más representados y los seis más
subrepresentados usando las funciones head()
y
tail()
respectivamente.
rho2 <- rho2[order(rho2$Freq),] # primero lo ordenamos de menor a mayor
rho2_ext <- rbind(head(rho2), tail(rho2))
nrow(rho2_ext)
## [1] 12
Ahora si podemos usar ggplot para graficar y ver si encontramos algún dato interesante
ggplot(data = rho2_ext, aes(fill=Var1, y=Freq, x=Var1)) +
geom_bar(position="stack", stat="identity") +
labs(title = "FRECUENCIA RELATIVA DE DINUCLEOTIDOS",
subtitle = "SARS-CoV-2 genoma",
x = "Dinucleotido",
y = "Frecuencia relativa") +
theme(legend.position = "none")
De forma interesante el codon “CGA” que es el menos representado en el genoma del SARS-CoV-2 también es el menos representado en el genoma del ser Humano, y se ha reportado que este codon cumple un rol particular en el proceso de transcripción del Virus de la leucemia murina. Por otro lado, el trinucleotido mas representado en el genoma es el “ACA”; curiosamente un estudio del 2011 mostro que la expresión de una endonucleasa espercifica de la secuencia ACA inhibe la infeccion de VIH en un modelo experimental in vitro. Este podría ser un tema interesante para estudiar como una alternativa de tratamiento en SARS-CoV-2 (tal vez para la siguiente pandemia).
Como vimos en la gráfica anterior, el dinucleótido menos representado
por mucho es el “GC”. Curiosamente, los sitios ricos en GC son reguladores -Cis
positivos de la transcripción y están asociados a regiones de inicio
de transcripción, promotores y enhancers. Para saber rapidamente el
contenido (frecuencia relativa) de GC en una secuencia podemos usar la
función GC()
del paquete seqinr.
seqinr::GC(covid19)
## [1] 0.3797278
Para analizar la presencia de GC a lo largo de la secuencia, podemos definir una ventana e ir haciendo el calculo sub-secuencia por subsecuencia, corriendo uno a la vez. Para eso vamos a tener que definir la amplitud de la ventana y hacer uso de la loop for para ir haciendo las iteraciones
win.size <- 100 # definimos el tamaño de la ventana
pos.end <- length(covid19) - win.size # definimos la última posición posible para la ventana
res <- vector() # creamos el vector resultante
for (i in 1:pos.end) { # iniciamos el loop for
j <- i + win.size # definimos la posicion final de la ventana
p1 <- seqinr::GC(covid19[i:j]) # calculamos la concentracion de GC en la subsecuencia especifica
res <- c(res, p1) # agregamos el valor al vector resultante
}
plot(res, type = "l") # generamos un grafico de línea
Con esta forma de analizar tenemos dos limitaciones. La primera es que si desemos escoger diferentes amplitudes de ventana, vamos a tener que repetir las lineas de codigo y la segunda es que necesitamos probar diferentes dimensiones, porque hasta este punto no sabemos si las regiones regulatorias son de 20, 50, 100, 200 o 300 nucleotidos de longitud; lo único que sabemos es que la frecuencia relativa de GC en todo el genoma es de 0.3797 ~ 38%.
Para resolver el primer problema definiremos una función
personalizada llamada GCcontet
, que tendrá dos parámetros
bd1
que será la secuencia a analizar y win.len
que será la amplitud de la ventana. Usaremos la misma estructura que
usamos en el ejercicio anterior pero ahora lo metermos dentro de una
función.
GCcontet <- function(db1, win.len){ # inicializamos la función con los dos parámetros
pos.end <- length(db1) - win.len # definimos la última posición posible
res <- vector() # creamos un vector vacío
for (i in 1:pos.end) { # iniciamos el loop
j <- i + win.len # definimos la ultima posicion de la ventana
p1 <- seqinr::GC(db1[i:j]) # calculamos el contenido de GC
res <- c(res, p1) # Agregamos el resultado a la cola
}
return(res) # OUTPUT: devolvemos el resultado
}
Con esta función ya podemos calcular el contenido de GC a lo largo de la secuencia con una amplitud de ventana variable
ven20 <- GCcontet(db1 = covid19, win.len = 20)
plot(ven20,type = "l", col = "green")
ven10000 <- GCcontet(db1 = covid19, win.len = 10000)
lines(ven10000, col = "red")
El problema que se genero ahora es que no podemos graficar las dos lineas de forma adecuada porque los vectores son de longitudes diferentes y las “posiciones” de cada dato realmente no corresponden a la posición en la secuencia. Por otro lado, si es que quisieramos usar el paquete ggplot para graficarlo, sería necesario convertirlo a data.frame. Entonces vamos a cambiar un poco la función para que el OUTPUT sea un data.frame y que una columna corresponda a la posición (el centro de la ventana) y la otra columan sea la frecuencia. Así podremos graficarlo usando cordenadas “X” y “Y”.
GCcontet <- function(db1, win.len){
pos.end <- length(db1) - win.len # ultima posicion posible de la ventana
res <- vector() # vector para la frecuencia
pos <- vector() # vector para la posicion
for (i in 1:pos.end) { # iniciamos el loop for
j <- i + win.len # definimos la ultima posicion dentro del loop
p1 <- seqinr::GC(db1[i:j]) # calculo de la frecuencia de CG
res <- c(res, p1) # agregamos el valor a la cola
p2 <- mean(c(i,j)) # calculamos la mitad de la ventana
pos <- c(pos,p2) # agregamos la posicion a la cola
}
res <- data.frame(pos = pos, freq = res) # creamos el data.frame
return(res) # devolvemos el OUTPUT
}
Ahora con esta función ya deberíamos poder graficarlo sin problemas
ven20 <- GCcontet(db1 = covid19, win.len = 20)
ven10000 <- GCcontet(db1 = covid19, win.len = 10000)
plot(x=ven20$pos, y=ven20$freq,type="l", col="green")
lines(x=ven10000$pos, y=ven10000$freq, col="red")
Ahora aprovecharemos la versatilidad de las listas para generar el analisis con diferentes amplitudes de listas y poderlos guardar en un mismo objeto pese a que tienen diferentes dimensiones y son data.frames
mainL <- list() # creamos una lista vacia
ventanas <- c(10,20,50,100,200,300,400,500,1000,2000) # definimos el tamaño de las ventanas
for (i in 1:length(ventanas)) { # iniciamos el loop
mainL[[i]] <- GCcontet(db1 = covid19, # en cada slot guardamos data data.frame
win.len = ventanas[i])
}
Verifiquemos que son de diferente dimension
summary(mainL)
## Length Class Mode
## [1,] 2 data.frame list
## [2,] 2 data.frame list
## [3,] 2 data.frame list
## [4,] 2 data.frame list
## [5,] 2 data.frame list
## [6,] 2 data.frame list
## [7,] 2 data.frame list
## [8,] 2 data.frame list
## [9,] 2 data.frame list
## [10,] 2 data.frame list
sapply(mainL, nrow)
## [1] 29893 29883 29853 29803 29703 29603 29503 29403 28903 27903
Antes de ver las graficas de lineas de los resultados, veamos si la distribucion “normal” de los resultados. Para ello usaremos histogramas, pero nos convendria hacerlo uno encima del otro (overplot). Para ello, nuevamente haremos uso de una lista y un loop para llenar en cada slot de la lista el resultado del histograma
mainHist <- list()
for(i in 1:length(mainL)){
tmp1 <- mainL[[i]]
mainHist[[i]] <- hist(tmp1[,2])
}
Antes de hacer los histogramas, vamos a ver como podemos definir los colores de nuestras graficas. Esto va a ser de suma utilidad cuando publiquemos nuestros articulos, porque podremos: definir los colores que querramos usar, utilizar los mismo colores para cada grafica, y utilizar un codigo de colores como identificador de cada grupo de datos. Para ello, aunque pueden definir los colores que Uds gusten, yo les recomiendo usen paletas de colores ya diseñadas por personas que se dedican a esto. Como la que pueden encontrar en las paletas de adobe
main.col <- c(rgb(196/256,51/256,2/256,0.2),
rgb(237/256,170/256,37/256,0.2),
rgb(183/256,191/256,153/256,0.2),
rgb(10/256,115/256,115/256,0.2),
rgb(1/256,2/256,33/256,0.2))
Ahora ya podemos hacer nuestros histogramas, usando nuevamente un loop
plot( mainHist[[1]], col=main.col[1],ylim=c(0,12), freq=F) # first histogram
for(i in 2:5){
plot( mainHist[[i]], col=main.col[i], freq=F, add=T) # second
}
Ahora necesitamos crear un data frame con 3 columnas, una con los valores de “X” (localización), otra con los valores de “Y” (valor de CG) y una tercera columna para el grupo de datos al que pertenece cada dato
res <- data.frame(pos=vector(),freq=vector(),group=vector()) # creamos el data.frame vacio
for(i in 1:length(mainL)){
tmp1 <- cbind(mainL[[i]],
group=rep(paste("window-",
ventanas[i],
sep = ""
),
nrow(mainL[[i]])
)
)
res <- rbind(res,tmp1)
}
Ahora que ya tenemos el data.frame en el formato que necesitamos,
podemos usar la funcion geom_lineplot()
del paquete
ggplot2
ggplot(data = res, aes(x= pos, y=freq, color = group)) +
geom_line() +
geom_hline(yintercept = seqinr::GC(covid19), color = "red", size = 1.5) +
geom_hline(yintercept = 2*seqinr::GC(covid19), color = "red", size = 1, linetype="dashed")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Como podemos ver, con la ventana de 10 bases tenemos picos cuya
frecuencia es superior al doble de la frecuencia esperada para toda la
secuencia. Para encontrar esas posiciones, podemo usar la funcion
order
para poner en orden creciente el data.frame de la
ventana de 10 y luego seleccionar las ultimas filas con la funcion
tail()
ven10 <- mainL[[1]] # extraemos los datos correspondeintes a la ventana 10
ven10 <- ven10[order(ven10$freq),] # ordenamos el data.frame en orden creciente segun la freq
peaks <- tail(ven10,16) # extraemos los ultimos 16 valores
peaks # imprimimos en pantalla el resultado
## pos freq
## 28390 28395 0.8181818
## 28391 28396 0.8181818
## 28394 28399 0.8181818
## 28800 28805 0.8181818
## 29194 29199 0.8181818
## 29196 29201 0.8181818
## 29732 29737 0.8181818
## 29733 29738 0.8181818
## 29734 29739 0.8181818
## 29735 29740 0.8181818
## 29736 29741 0.8181818
## 29737 29742 0.8181818
## 15955 15960 0.9090909
## 23603 23608 0.9090909
## 23606 23611 0.9090909
## 29195 29200 0.9090909
Para ver las secuencias correspondientes, usamos el valor de la columna “posicion” que sabemos define posición de la mitad de la ventana. Lo que sería interesante es alinear estas secuencias y ver si hay una región concenso que puede sugerir alguna secuencia regulatoria o un blanco terapeutico.
seq <- vector()
tam <- 5
for(i in 1:nrow(peaks)){
p1 <- seqinr::c2s(covid19[(peaks$pos[i]-tam):(peaks$pos[i]+tam)])
seq <- rbind(seq,p1)
}
# generamos el alineamiento
msa(unlist(as.list(seq)), type="dna")
## use default substitution matrix
## CLUSTAL 2.1
##
## Call:
## msa(unlist(as.list(seq)), type = "dna")
##
## MsaDNAMultipleAlignment with 16 rows and 18 columns
## aln
## [1] ---CCTCGGCGGGC----
## [2] ------CGGCGGGCACG-
## [3] ---GCAGAGGCGGC----
## [4] -----GGGGCCGGCTG--
## [5] --CCGAGGCCACG-----
## [6] ---CGAGGCCACGC----
## [7] ----GAGGCCACGCG---
## [8] ------GGCCACGCGGA-
## [9] -------GCCACGCGGAG
## [10] -----AGGCCACGCGG--
## [11] ACGTCGGCCCC-------
## [12] -CGTCGGCCCCA------
## [13] ------CCCCCAGCGCT-
## [14] -----GCCCCCAGCGC--
## [15] ----TGCCCCCAGCG---
## [16] ----CGGCCCCAAGG---
## Con ----??GGCCC?GCG---
Interesantemente tenemos una secuencia “concenso” de 5 bases nitrogenadas, que como ya vimos anteriormente es altamente improbable que sucedan de forma aleatoria. La pregunta es si está relacionado con alguna zona “regulatoria cis”, como secuencia promotora o un enhancer. El articulo de Chen et al (1999) muestra que esta secuencia llamada “Elementos de respuesta a metales de alta afinidad”y que se une a los dedos de Zinc del factor de transcripción MTF-1. Ademas esta secuencia tambien se encuentra presente en la region promotora del factor de necrosis tumoral alfa y su presencia se encuentra disminuida en los pacientes con enfermedad de Takayasu (Naqiang et al 2011).
Si ampliamos un poco mas la ventana de las secuecias a 10 nucleotidos por lado, tenemos tambien un resultado interesante
seq <- vector()
tam <- 10
for(i in 1:nrow(peaks)){
p1 <- seqinr::c2s(covid19[(peaks$pos[i]-tam):(peaks$pos[i]+tam)])
seq <- rbind(seq,p1)
}
# generamos el alineamiento
msa(unlist(as.list(seq)), type="dna")
## use default substitution matrix
## CLUSTAL 2.1
##
## Call:
## msa(unlist(as.list(seq)), type = "dna")
##
## MsaDNAMultipleAlignment with 16 rows and 29 columns
## aln
## [1] --AAACAACGTCGGCCCCAAGGT------
## [2] ---AACAACGTCGGCCCCAAGGTT-----
## [3] ------AACGTCGGCCCCAAGGTTTAC--
## [4] ------CAATTTGCCCCCAGCGCTTCA--
## [5] -------AATTTGCCCCCAGCGCTTCAG-
## [6] --------ATTTGCCCCCAGCGCTTCAGC
## [7] -------ACCGAGGCCACGCGGAGTACG-
## [8] --------CCGAGGCCACGCGGAGTACGA
## [9] ------CACCGAGGCCACGCGGAGTAC--
## [10] -----TCACCGAGGCCACGCGGAGTA---
## [11] ---TTTCACCGAGGCCACGCGGAG-----
## [12] ----TTCACCGAGGCCACGCGGAGT----
## [13] ATTCTCCTCGGCGGGCACGTA--------
## [14] ---CTCCTCGGCGGGCACGTAGTG-----
## [15] ---AGGGAGCAGAGGC-GGCAGTCA----
## [16] ------TCCTAGGGGCCGGCTGTTTTG--
## Con ------?AC?G?GGCCACGCGG??T?---
Esta secuencia concenso “GGCCACGCGG” de 10 nt, mostró en una simulación in silico que puede unirse a los farmacos como Amonafie o Azonafide (Bear & Remers 1996). Y estos fármacos estan en fase III de experimentación como tratamiento contra Leucemia mieloide aguda (Allen & Lundberg 2011). Lo que abre la posiblidad con un blanco terapeutico en contra del COVID.
El paquete seqinr nos ofrece una función muy útil
para hace una analisis descriptivo de las secuencias de aminoacidos de
una proteína, como por ejemplo: el punto isoelectrico, el peso
molecular, la frecuencia absoluta de los aminoacidos, asi com la
proporcion de aminoacidos basico, acidos, apolares, pequeños, entre
otros. Esta función se llama AAstat()
, y el único parámetro
que necesita es meter la secuencia como una cadena de caracteres. Para
este ejemplo vamos a trabajar con tres secuencias:
Primero para llamar las secuencias usaremos la función
query()
del paquete seqinr. Luego
seleccionaremos el base de datos de Uniprot y llamaremos a cada
secuencia usando su ID.
library(seqinr)
seqinr::choosebank(infobank = T)
## bank status
## 1 genbank on
## 2 embl on
## 3 emblwgs on
## 4 genbankseqinr on
## 5 swissprot on
## 6 ensembl on
## 7 hogenom7dna on
## 8 hogenom7 on
## 9 hogenom on
## 10 hogenomdna on
## 11 hovergendna on
## 12 hovergen on
## 13 hogenom5 on
## 14 hogenom5dna on
## 15 hogenom4 on
## 16 hogenom4dna on
## 17 homolens on
## 18 homolensdna on
## 19 hobacnucl on
## 20 hobacprot on
## 21 phever2 on
## 22 phever2dna on
## 23 refseq on
## 24 refseq16s on
## 25 greviews on
## 26 bacterial off
## 27 archaeal on
## 28 protozoan on
## 29 ensprotists on
## 30 ensfungi on
## 31 ensmetazoa on
## 32 ensplants on
## 33 ensemblbacteria on
## 34 mito on
## 35 polymorphix on
## 36 emglib on
## 37 refseqViruses on
## 38 ribodb on
## 39 taxodb on
## info
## 1 GenBank Release 246 (15 October 2021) Last Updated: Nov 19, 2021
## 2 EMBL Nucleotide Archive Release 143 (March 2020) Last Updated: Nov 21, 2021
## 3 EMBL Whole Genome Shotgun sequences (July 2018)
## 4 GenBank Release 231 (15 April 2019) Last Updated: Jun 8, 2019
## 5 UniProt Knowledgebase Release 2021_03 of 09-Jun-2021, Last Updated: Aug 6, 2021
## 6 Ensembl 85 - (10/03/16) Last Updated: Oct 3, 2016
## 7 HOGENOM - genomic data - Release 07 (Nov 3,2015) Last Updated: Apr 19, 2017
## 8 HOGENOM - protein data - Release 07 (Nov 3,2015) Last Updated: Jun 3, 2019
## 9 HOGENOM - protein data - Release 06 (Oct 30,2011) Last Updated: May 10, 2012
## 10 HOGENOM - genomic data - Release 06 (Oct 30,2011) Last Updated: Nov 14, 2011
## 11 HOVERGEN - genomic data - Release 49 (Dec 22 2009) Last Updated: Dec 22, 2009
## 12 HOVERGEN - protein data - Release 49 (Dec 22 2009) Last Updated: Dec 22, 2009
## 13 HOGENOM5 (AA)
## 14 HOGENOM5 (DNA)
## 15 HOGENOM4 (AA)
## 16 HOGENOM4 (DNA)
## 17 HOMOLENS 5 - Homologous genes from Ensembl(60)\t Last Updated: Feb 17, 2011
## 18 HOMOLENS 5 - Homologous genes from Ensembl(60)\t Last Updated: Feb 17, 2011
## 19 HOBACGEN - genomic data - Release 10 (February 12 2002)
## 20 HOBACGEN - protein data - Release 10 (February 12 2002)
## 21 PhEVER - protein data - Release 2 (June 1 2010) Last Updated: Jul 22, 2010
## 22 PhEVER - genomic data - Release 2 (June 1 2010) Last Updated: Jul 22, 2010
## 23 Refseq RNA Sequences. Last Updated: Jan 27, 2018
## 24 Refseq RNA 16S 23S Sequences. Last Updated: Jan 29, 2018
## 25 Genome Review from EBI Last Updated: Jan 24, 2013
## 26 NCBI Bacterial Genomes
## 27 Archaeal Genomes from NCBI Last Updated: Aug 25, 2015
## 28 Protozoan Genomes from NCBI Last Updated: Feb 23, 2011
## 29 Ensembl protists 86 - (10/05/16) Last Updated: Oct 5, 2016
## 30 Ensembl fungi 86 - (10/09/16) Last Updated: Oct 9, 2016
## 31 Ensembl protists 86 - (10/05/16) Last Updated: Oct 5, 2016
## 32 Ensembl protists 86 - (10/16/16) Last Updated: Oct 16, 2016
## 33 Ensembl Bacterial Genomes 21 - (02/23/14) Last Updated: Feb 27, 2014
## 34 Mitochondrial sequences - Release 41 (May 19, 2010) Last Updated: Jul 9, 2010
## 35 POLYBASE - Release 1 (June 20, 2003)
## 36 EMGLib Release 5 (December 9, 2003)
## 37 RNA sequences - numrel1 (daterel1) Last Updated: May 10, 2012
## 38 RiboDB
## 39 taxonomic database
seqinr::choosebank("swissprot")
app <- seqinr::query("app", "AC=P05067")
actin <- seqinr::query("actin", "AC=P60709")
trem2 <- seqinr::query("trem2", "AC=Q9NZC2")
Luego extraeremos las secuencias usando la función
getSequence()
del mismo paquete (recuerda que las tienes
que sacar de la lista)
app.seq <- unlist(seqinr::getSequence(app))
actin.seq <- unlist(seqinr::getSequence(actin))
trem2.seq <- unlist(seqinr::getSequence(trem2))
Finalmente, usaremos la función AAstat()
para obtener la
estadistica descriptiva de cada una de ellas
seqinr::AAstat(app.seq)
## $Compo
##
## * A C D E F G H I K L M N P Q R S T V W Y
## 0 63 18 50 92 21 38 25 24 41 56 24 31 35 36 37 35 50 65 9 20
##
## $Prop
## $Prop$Tiny
## [1] 0.2649351
##
## $Prop$Small
## [1] 0.5
##
## $Prop$Aliphatic
## [1] 0.1883117
##
## $Prop$Aromatic
## [1] 0.0974026
##
## $Prop$Non.polar
## [1] 0.4844156
##
## $Prop$Polar
## [1] 0.5155844
##
## $Prop$Charged
## [1] 0.3181818
##
## $Prop$Basic
## [1] 0.1337662
##
## $Prop$Acidic
## [1] 0.1844156
##
##
## $Pi
## [1] 4.730445
seqinr::AAstat(actin.seq)
## $Compo
##
## * A C D E F G H I K L M N P Q R S T V W Y
## 0 29 6 23 26 13 28 9 28 19 27 17 9 19 12 18 25 26 22 4 15
##
## $Prop
## $Prop$Tiny
## [1] 0.304
##
## $Prop$Small
## [1] 0.4986667
##
## $Prop$Aliphatic
## [1] 0.2053333
##
## $Prop$Aromatic
## [1] 0.1093333
##
## $Prop$Non.polar
## [1] 0.5546667
##
## $Prop$Polar
## [1] 0.4453333
##
## $Prop$Charged
## [1] 0.2533333
##
## $Prop$Basic
## [1] 0.1226667
##
## $Prop$Acidic
## [1] 0.1306667
##
##
## $Pi
## [1] 5.290482
seqinr::AAstat(trem2.seq)
## $Compo
##
## * A C D E F G H I K L M N P Q R S T V W Y
## 0 16 6 13 12 7 19 11 9 6 36 2 4 14 11 12 17 15 10 7 3
##
## $Prop
## $Prop$Tiny
## [1] 0.3173913
##
## $Prop$Small
## [1] 0.4956522
##
## $Prop$Aliphatic
## [1] 0.2391304
##
## $Prop$Aromatic
## [1] 0.1217391
##
## $Prop$Non.polar
## [1] 0.5608696
##
## $Prop$Polar
## [1] 0.4391304
##
## $Prop$Charged
## [1] 0.2347826
##
## $Prop$Basic
## [1] 0.126087
##
## $Prop$Acidic
## [1] 0.1086957
##
##
## $Pi
## [1] 5.838939