CC BY-NC-ND 3.0
masDos
es un objeto de tipo función (function
). Tiene un solo argumento x
. El resultado de la función corresponde a return()
. Si no hay return()
, R toma como resultado el ultimo calculo.
masDos <- function(x){
return(x + 2)
}
masDos(x = 5)
## [1] 7
Una función que contará el número de consonantes y vocales en un texto.
# countVowelConso("mi texto")
# conso voca
# 4 3
Lenín Moreno ; Davos - Suiza, enero 22 de 2019 https://www.presidencia.gob.ec/discursos/
miTexto <- "Buenas noches. Yo creo que si hay algo que diferencia al Ecuador de los otros países, es la extraordinaria diversidad que tiene en un pequeño territorio. El Ecuador tiene riquezas por encima y por debajo de su suelo: Por encima: una diversidad arquitectónica; una diversidad en su clima; una diversidad en su paisaje, en su fauna, en su flora, en sus etnias inclusive. Cuando se recorre Ecuador, hay diversidad de vestimenta, diversidad de folclor, de música, diversidad de gastronomía. Una extraordinaria megadiversidad. Es probable que no me equivoque al decir que somos el país más megadiverso del mundo en proporción a su tamaño. Y por debajo de su suelo, una riqueza extraordinaria: tenemos minerales como el cobre, muy seguramente el 13 ó 14% de la reserva mundial de cobre está en el Ecuador. Tenemos petróleo, ya lo mencionaba Luis Alberto (Moreno, presidente del BID); tenemos oro, mucho oro, a tal punto que han proliferado los mineros artesanales y el gobierno está tratando de poner en orden aquello. Pero sobre todo, para atraer las inversiones tenemos un país que está ávido de recibir capitales del mundo para poder desarrollar actividades turísticas, mineras, productivas varias. Tenemos varias ventajas: estabilidad política, estabilidad económica —esto lo determina nuestro sistema dolarizado—, y sobre todo seguridad jurídica para garantizar que las leyes y normas no vayan a cambiar, a tal punto de que los inversionistas puedan sentirse seguros de invertir en Ecuador."
miTexto <- gsub("á", replacement = "a", miTexto)
miTexto <- gsub("í", replacement = "i", miTexto)
miTexto <- gsub("ñ", replacement = "n", miTexto)
miTexto <- gsub("ó", replacement = "o", miTexto)
miTexto <- gsub("ú", replacement = "u", miTexto)
miTexto <- gsub("\\—|,|;|:|\\.|\\(|\\)|%", replacement = "", miTexto)
character
en un vector
de tamaño correspondiente al numero de caracteres en el texto.textoSplit <- strsplit(miTexto, split = "")[[1]]
length(textoSplit)
## [1] 1447
Comprobamos que no queda caracteres especiales.
table(textoSplit)
## textoSplit
## 1 3 4 a A b B c C d D e E f g h i
## 235 2 1 1 137 1 15 2 34 1 80 1 158 7 5 9 5 93
## I j l L m M n o p P q r s t T u U v
## 1 5 47 1 33 1 77 105 25 2 16 100 92 52 2 58 1 23
## x y Y z
## 3 10 2 4
vocal <- c("a", "e", "i", "o", "u", "y",
"A", "E", "I", "O", "U", "Y")
conso <- c(letters[!letters %in% vocal],
LETTERS[!LETTERS %in% vocal])
numVocal <- length(textoSplit[textoSplit %in% vocal])
numConso <- length(textoSplit[textoSplit %in% conso])
print(numVocal)
## [1] 573
print(numConso)
## [1] 635
countVowelConso <- function(miTexto){
miTexto <- gsub("á", replacement = "a", miTexto)
miTexto <- gsub("í", replacement = "i", miTexto)
miTexto <- gsub("ñ", replacement = "n", miTexto)
miTexto <- gsub("ó", replacement = "o", miTexto)
miTexto <- gsub("ú", replacement = "u", miTexto)
miTexto <- gsub("é", replacement = "e", miTexto)
miTexto <- gsub("\\—|,|;|:|\\.|\\(|\\)|%|“|”|\\-", replacement = "", miTexto)
textoSplit <- strsplit(miTexto, split = "")[[1]]
vocal <- c("a", "e", "i", "o", "u", "y",
"A", "E", "I", "O", "U", "Y")
conso <- c(letters[!letters %in% vocal],
LETTERS[!LETTERS %in% vocal])
numVocal <- length(textoSplit[textoSplit %in% vocal])
numConso <- length(textoSplit[textoSplit %in% conso])
return(c(conso = numConso, voca = numVocal))
}
countVowelConso(miTexto)
## conso voca
## 635 573
otroTexto <- "Un esfuerzo extraordinario que en los dos últimos años ha realizado el Ministerio del Interior, que maneja la Policía y seguridad, ha permitido que la tasa de homicidios disminuya. Sin embargo, dentro de esta buena noticia hay una mala: en la tasa de homicidios, ha crecido la tasa de femicidios. Esto se debe —entendemos— a una costumbre atávica que, generalmente, tenemos los latinos: creer que la mujer es posesión de uno. Y el momento en que ella toma alguna decisión enmarcada en las últimas conquistas de sus derechos, el hombre piensa que algo que le pertenecía le ha sido arrebatado. Y, a veces, toma decisiones extremadamente trágicas. Para remediar en lo posible esta situación, sin duda está la tarea de promover y promocionar valores y su práctica. Sobre todo en los niños, mediante la enseñanza de derechos humanos y de valores, desde la primera infancia. Para que desde esas etapas se vayan acostumbrando a la idea de que la mujer tiene el derecho de elegir. Eso va a ayudar muchísimo para disminuir la tasa de femicidios. Sin duda, hay otros aspectos que inciden en la tasa de homicidios, como es la criminalidad vinculada principalmente al narcotráfico. Eso también está siendo combatido de forma muy denodada, mediante una acción efectiva del Ministerio de Defensa y del Ministerio del Interior. Estamos preocupados porque el consumo de droga ha crecido. Eso es preocupante y estamos solucionándolo también —vuelvo a recalcar—, mediante la promoción de valores. Sobre todo, inculcando a niños y jóvenes que se identifiquen con las cosas maravillosas de la vida, para que no tengan la necesidad de acudir a la alternativa de buscar sustitutos miserables, como la droga."
countVowelConso(otroTexto)
## conso voca
## 718 652
ultimoTexto <- "Antes del evento electoral en el cual triunfó el presidente Maduro, Ecuador había pedido que ese evento se haga bajo los cánones de la democracia: Que haya una amplia participación y no sea excluida la oposición, que no haya las “trampillas” que suele haber en los denominados sistemas democráticos en más de una ocasión. Y que haya la observación internacional, lo más amplia que se pueda, para poder verificar de forma imparcial si esos triunfos electorales eran válidos o no. Y apelábamos —como de costumbre lo hacemos porque lo hemos implementado como política de gobierno— al diálogo entre las partes, para que la solución sea pacífica. Lastimosamente, la respuesta fue negativa. E inmediatamente como resultado de aquello -creo yo-, inició un éxodo de más de dos millones de venezolanos hacia algunos países, principalmente a Colombia, Ecuador, Perú y Chile. A Ecuador han llegado aproximadamente un millón de migrantes venezolanos, y se han quedado 150 mil, a los cuales hemos respetado plenamente sus derechos, les hemos proporcionado educación, salud, trabajo. Y por supuesto, hemos apelado al gobierno venezolano para que solucione esa crisis humanitaria. Aproximadamente 6 mil hermanos venezolanos por día estaban ingresando al Ecuador hace 3 ó 4 meses. Así lo manifesté yo en las Naciones Unidas y el ministro de Comunicación de Venezuela me dijo que yo había mentido, que no eran 6 mil diarios sino solamente 5 mil quinientos. Eso no me asombró, porque todos sabemos los problemas en matemáticas que suele tener el ministro de Comunicación. O si no, recuerden el “problema de las pizzas”, que lo resolvió con tanta sobriedad académica. El presidente Alvarado y el presidente Abdo lo han dicho de manera concreta: hay que resolverlo entre todos. Entre todos. No creo en los intervencionismos militares, pero sí en aquellos intervencionismos en los cuales uno apela a que se respeten los derechos humanos de los ciudadanos, cosa que no está pasando —lastimosamente— en la hermana república de Venezuela. Nosotros aspiramos a que el gobierno venezolano sea sensible, que la oposición también sea sensible. Y que acudan al diálogo como el mejor mecanismo para resolver las controversias, y poder encaminar verdaderamente por un sendero democrático al querido pueblo venezolano."
countVowelConso(ultimoTexto)
## conso voca
## 977 887
textoCompleto <- paste(miTexto, otroTexto, ultimoTexto)
countVowelConso(textoCompleto)
## conso voca
## 2330 2112
countLetras <- function(miTexto){
miTexto <- gsub("á", replacement = "a", miTexto)
miTexto <- gsub("í", replacement = "i", miTexto)
miTexto <- gsub("ñ", replacement = "n", miTexto)
miTexto <- gsub("ó", replacement = "o", miTexto)
miTexto <- gsub("ú", replacement = "u", miTexto)
miTexto <- gsub("é", replacement = "e", miTexto)
miTexto <- gsub("\\—|,|;|:|\\.|\\(|\\)|%|“|”|\\-|[0-9]| ",
replacement = "", miTexto)
miTexto <- tolower(miTexto)
textoSplit <- strsplit(miTexto, split = "")[[1]]
return(table(textoSplit))
}
countLetras(textoCompleto)
## textoSplit
## a b c d e f g h i j l m n o p q r s
## 524 56 168 250 610 21 30 47 325 13 224 169 305 427 103 57 275 340
## t u v x y z
## 185 182 61 9 44 17
sort(countLetras(textoCompleto), decreasing = TRUE)
## textoSplit
## e a o s i n r d l t u m c p v q b h
## 610 524 427 340 325 305 275 250 224 185 182 169 168 103 61 57 56 47
## y g f z j x
## 44 30 21 17 13 9
countLetras <- function(miTexto = "mi texto"){
#...
}
Casi todas las funciones ya existen … consulte la documentación e Internet antes de embarcarse en la redacción de una nueva función. La mayoría están en paquetes.
install.packages("devRate")
para instalar
library("devRate")
para usar
pkgCheck <- function(packages){
for(x in packages){
try(if (!require(x, character.only = TRUE)){
install.packages(x, dependencies = TRUE)
if(!require(x, character.only = TRUE)) {
stop()
}
})
}
}
pkgCheck(c("devRate"))
¡Portabilidad!