Actividad colaborativa en clase | Ejercicios R

1.-Escribe una función que genere una secuencia aleatoria de DNA de tamaño “n” utilizando solo los 4 nucleótidos: A, T, C, G

generar_DNA <- function(n) {
  nucleotidos <- c("A", "T", "C", "G")
  secuencia <- sample(nucleotidos, n, replace = TRUE)
  return(paste(secuencia, collapse = ""))
}
generar_DNA(10)
## [1] "ACGTGGGAGT"

2.-Codifica una función que calcula el tamaño de una secuencia de DNA

tamano_DNA <- function(secuencia) {
  return(nchar(secuencia))
}

tamano_DNA("CTGGTTA")
## [1] 7

3.-Crea una función que recibe una secuencia de DNA e imprime el porcentaje de cada base en la secuencia

porcentaje_bases <- function(secuencia) {
  total_bases <- nchar(secuencia)
  
  num_a <- nchar(gsub("[^A]", "", secuencia))
  num_c <- nchar(gsub("[^C]", "", secuencia))
  num_g <- nchar(gsub("[^G]", "", secuencia))
  num_t <- nchar(gsub("[^T]", "", secuencia))
  
  porcentaje_a <- num_a / total_bases * 100
  porcentaje_c <- num_c / total_bases * 100
  porcentaje_g <- num_g / total_bases * 100
  porcentaje_t <- num_t / total_bases * 100
  
  cat("Porcentaje de A:", porcentaje_a, "%\n")
  cat("Porcentaje de C:", porcentaje_c, "%\n")
  cat("Porcentaje de G:", porcentaje_g, "%\n")
  cat("Porcentaje de T:", porcentaje_t, "%\n")
}

porcentaje_bases("ATCGATCGATCG")
## Porcentaje de A: 25 %
## Porcentaje de C: 25 %
## Porcentaje de G: 25 %
## Porcentaje de T: 25 %

4.-Programa una función que transcribe DNA a RNA, asume que te están proporcionando la cadena codificante

transcribir_a_RNA <- function(secuencia_DNA) {
  secuencia_RNA <- gsub("T", "U", secuencia_DNA)
  return(secuencia_RNA)
}

transcribir_a_RNA("ATGCTAGCGTAA")
## [1] "AUGCUAGCGUAA"

5.-Crea una función que traduce una secuencia de RNA a una secuencia de proteínas

sec_p <- function(rna){
  if((rna=="UUU") |(rna == "UUC")) {
    prot <- "Phe"
  } else if ((rna == "UUA") |(rna == "UUG")) {
    prot <- "Leu"
  } else if ((rna == "UCU") | (rna == "UCC") | (rna == "UCA") | (rna == "UCG")) {
    prot <- "Ser"
  } else if ((rna == "UAU") | (rna == "UAC")) {
    prot <- "Tyr"
  } else if ((rna == "UGU") | (rna == "UGC")) {
    prot <- "Cys"
  } else if ((rna == "UGG")) {
    prot <- "Trp"
  } else if ((rna == "CUU") | (rna == "CUC") | (rna == "CUA") | (rna == "CUG")) {
    prot <- "Leu"
  } else if ((rna == "CCU") | (rna == "CCC") | (rna == "CCA") | (rna == "CCG")) {
    prot <- "Pro"
  } else if ((rna == "CAU") | (rna == "CAC")) {
    prot <- "His"
  } else if ((rna == "CAA") | (rna == "CAG")) {
    prot <- "Gin"
  } else if ((rna == "CGU") | (rna == "CGC") | (rna == "CGA") | (rna == "CGG")) {
    prot <- "Arg"
  } else if ((rna == "AUU") | (rna == "AUC") | (rna == "AUA")) {
    prot <- "Ile"
  } else if ((rna == "AUG")) {
    prot <- "Met"
  } else if ((rna == "ACU") | (rna == "ACC") | (rna == "ACA") | (rna == "ACG")) {
    prot <- "Thr"
  } else if ((rna == "AAU") | (rna == "AAC")) {
    prot <- "Asn"
  } else if ((rna == "AAA") | (rna == "AAG")) {
    prot <- "Lys"
  } else if ((rna == "AGU") | (rna == "AGC")) {
    prot <- "Ser"
  } else if ((rna == "AGA") | (rna == "AGG")) {
    prot <- "Arg"
  } else if ((rna == "GUU") | (rna == "GUC") | (rna == "GUA") | (rna == "GUG")) {
    prot <- "Val"
  } else if ((rna == "GCU") | (rna == "GCC") | (rna == "GCA") | (rna == "GCG")) {
    prot <- "Ala"
  } else if ((rna == "GAU") | (rna == "GAC")) {
    prot <- "Asp" 
  } else if ((rna == "GAA") | (rna == "GAG")){
    prot <- "Glu"
  } else if ((rna == "GGU") | (rna == "GGC") | (rna == "GGA") | (rna == "GGG")) {
    prot <- "Gly"
  } else if ((rna == "UAA") | (rna == "UAG") | (rna == "UGA")) {
    prot <- "Stop"
  }
  
  prot
}

sec_p("AGC")
## [1] "Ser"

6.-Escribe una función que recibe una hebra directa y regresa la hebra inversa

invertir_hebra <- function(hebra_directa) {
  invertida <- rev(strsplit(hebra_directa, "")[[1]])
  return(paste(invertida, collapse = ""))
}
hebra_directa <- "5'-TGCGATAC-3'"
invertir_hebra(hebra_directa)
## [1] "'3-CATAGCGT-'5"

7.-Escribe una función qué recibe una hebra directa y obtiene la hebra complementaria.

obtener_complementaria <- function(hebra_directa) {
  complementaria <- ""
  for (i in 1:nchar(hebra_directa)) {
    nucleotido <- substr(hebra_directa, i, i)
    if (nucleotido == "A") {
      complementaria <- paste0(complementaria, "T")
    } else if (nucleotido == "T") {
      complementaria <- paste0(complementaria, "A")
    } else if (nucleotido == "C") {
      complementaria <- paste0(complementaria, "G")
    } else if (nucleotido == "G") {
      complementaria <- paste0(complementaria, "C")
    }
    else if (nucleotido == "5") {
      complementaria <- paste0(complementaria, "3")
    }
    else if (nucleotido == "3") {
      complementaria <- paste0(complementaria, "5")
    }
    else if (nucleotido == "'") {
      complementaria <- paste0(complementaria, "'")
    }
    else if (nucleotido == "'") {
      complementaria <- paste0(complementaria, "'")
    }
    else if (nucleotido == "-") {
      complementaria <- paste0(complementaria, "-")
    }
  }
  return(complementaria)
}
hebra_directa <- "5'-TGCGATAC-3'"
hebra_complementaria <- obtener_complementaria(hebra_directa)
print(hebra_complementaria)
## [1] "3'-ACGCTATG-5'"

8.-Escribe la función en R para obtener la hebra complementaria inversa, desde una hebra directa

invertir_hebra <- function(hebra_directa) {
  invertida <- rev(strsplit(hebra_directa, "")[[1]])
  for (i in seq_along(invertida)) {
    if (invertida[i] == "A") {
      invertida[i] <- "T"
    } else if (invertida[i] == "T") {
      invertida[i] <- "A"
    } else if (invertida[i] == "C") {
      invertida[i] <- "G"
    } else if (invertida[i] == "G") {
      invertida[i] <- "C"
    }
  }
  return(paste(invertida, collapse = ""))
}
hebra_directa <- "5'-TGCGATAC-3'"
hebra_inversa <- invertir_hebra(hebra_directa)
print(hebra_inversa)
## [1] "'3-GTATCGCA-'5"

9.-Modifica dos de las funciones para que tomen en cuenta que las secuencias pueden contener caracteres especiales donde aparte de ATGC, en ADN, y AUGC, en ARN, pueden existir guiones

random_DNA <- function(n) {
  bases <- c("A", "T", "C", "G", "-", "N") 
  dna_seq <- sample(bases, n, replace = TRUE)
  paste(dna_seq, collapse = "")
}
random_DNA(10)
## [1] "A-----NCNG"
hebra_directa <- function(secuencia) {

  secuencia <- toupper(trimws(secuencia))
  
  if ("U" %in% secuencia) {
    secuencia <- gsub("U", "T", secuencia)
  }
  
  hebra_directa <- gsub("-", "", secuencia)
  hebra_directa <- gsub("N", "", hebra_directa)
  return(hebra_directa)
}

secuencia_arn <- "AUGC-UGACN-CGAU"
hebra_directa(secuencia_arn) 
## [1] "AUGCUGACCGAU"