Cadenas de caracteres
Las cadenas de caracteres, como se introdujo en Variables, objetos atómicos y operadores, son una secuencia de caracteres cuya creación necesita que sean introducidos entre comillas. A continuación, se explica el tratamiento de estas cadenas y, para ello, se requiere el paquete stringr, el cual está contenido en la biblioteca tidyverse instalada en Conceptos básicos, donde también se indica cómo se carga una biblioteca (library()
).
Creación de cadenas con elementos funcionales¶
Las comillas para crear las cadenas de caracteres suelen ser dobles aunque, si se quiere introducir dicho símbolo como elemento de la cadena, se emplean comillas simples. Otro modo de incorporarlas sería incluyendo una barra invertida (\). Esto también se puede aplicar en el caso contrario, cuando se utilizan las comillas simples y se quiere introducir dicho símbolo también como elemento. La barra invertida es utilizada entre otras cosas para indicar, por ejemplo, saltos de línea o tabulación de la siguiente forma, respectivamente: \n y \t. Cuando aparecen elementos que realizan funciones como el salto de línea, el vector lo interpreta como caracter, aunque se puede ignorar mediante la función writeLines()
.
Ejemplos
1 2 3 4 |
|
Manipulación de cadenas¶
El paquete stringr contiene diversas funciones que también podrían llevarse a cabo con funciones de la biblioteca base que se incluye de forma predeterminada en la instalación de R. Mostramos algunas de ellas en la siguiente tabla:
base | stringr | Función |
---|---|---|
nchar() | str_length() | Tamaño de la cadena |
gsub() | str_replace() | Reemplaza un elemento por otro |
strsplit() | str_split() | Devuelve una lista con los componentes separados de la cadena |
Ejemplo
1 2 3 4 5 6 7 8 |
|
Info
- La función
str_replace_all()
permite realizar múltiples reemplazos. - La función
str_split()
ofrece la posibilidad de devolver una matriz aplicando el argumentosimplify = TRUE
.
Cree un script llamado num_simbolos.R que cuente los símbolos de una frase.Respuesta
1
2
3
4
frase <- readline(prompt="Indique la frase: ")
split_frase <- gsub(" ", "", frase)
num_simbolos <- nchar(split_frase)
cat("La frase contiene", num_letras, "símbolos.")
La biblioteca stringr posee una gran cantidad de funciones interesantes además de las mencionadas anteriormente. A continuación, se muestran varias de ellas:
stringr | Función |
---|---|
str_c() | Combina cadenas |
str_sub() | Extrae partes de cadenas |
str_extract() | Extrae partes de cadenas |
str_to_upper() | Cambia cadenas a mayúscula |
str_to_lower() | Cambia cadenas a minúscula |
str_sort() | Ordena cadenas por alfabeto |
str_detect() | Detecta coincidencias |
str_count() | Indica el número de coincidencias |
Ejemplos
1 2 3 4 5 6 7 8 9 |
|
Info
La función str_extract_all()
permite realizar extracciones distintas y devuelve una lista o, mediante el argumento simplify=TRUE
, una matriz.
Cree un script llamado ordenagente.R que devuelva los nombres de un grupo de gente ordenados y en mayúscula.Respuesta
1
2
3
4
5
6
7
8
9
10
library("stringr")
print("¿Cuántas personas engloba el grupo? ")
n_gente <- scan(n=1)
v_gente1 <- 2:n_gente
v_gente2 <- readline(prompt="Indique un integrante: ")
for (i in v_gente1){
v_gente2[i] <- readline(prompt="Indique otro integrante: ")
}
sort_up_gente <- str_sort(str_to_upper(v_gente2))
print(sort_up_gente)
Ejercicios complementarios¶
Cree un script llamado adn_a_arn_codones.R que devuelva el transcrito que se obtendría de una secuencia de ADN determinada y la división en codones.Respuesta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
library("stringr")
adn <- readline(prompt="Introduzca la secuencia de ADN: ")
arn <- str_replace_all(adn, c("A"="U", "T"="A", "G"="c", "C"="G"))
arn <- str_to_upper(arn)
cat("ARN:", arn)
codones <- c()
ncodones <- nchar(arn) / 3 + 1
aa <- 1
ab <- 3
for (i in 1:ncodones){
codones[i] <- str_sub(arn, aa, ab)
ab <- ab + 3
aa <- aa + 3
}
cat("Codones:", codones)
Cree un script llamado tabla_nucleotidos.R que devuelva la cantidad de nucleótidos como tabla.Respuesta
1
2
3
4
5
6
7
8
9
10
11
library("stringr")
adn <- readline(prompt="Introduzca la secuencia de ADN: ")
cadena <- strsplit(adn,"")
nucleotidos <- sort(unique(cadena))
histo <- matrix(0,1,length(nucleotidos))
for(i in 1:length(nucleotidos)){
histo[i]<- str_count(adn, nucleotidos[i])
}
colnames(histo) <- nucleotidos
rownames(histo) <- "cantidad"
print(histo)
Ejercicio resumen
El siguiente archivo .Rmd contiene un ejercicio de manipulación de una cadena procedente de un archivo FASTA (FASTA File), de modo que resuma de forma explicativa lo estudiado en este apartado, por lo que requiere la instalación de la biblioteca tidyverse: cadenas_fasta.Rmd. El archivo FASTA es el mismo cuya descarga es utilizada como ejemplo de descarga de ficheros en R en Conceptos básicos, por tanto podría acceder a dicho archivo de ambas formas.
Enlaces de interés
- R for Data Science. Garrett Grolemund & Hadley Wickham.
- Material del curso Informática aplicada a la Bioquímica. Manuel Jesús Marín Jiménez, Universidad de Córdoba.