--- title: "MAC0113-aula22" author: "Hirata" date: "13/06/2022" output: beamer_presentation --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE) ``` ## Aula 22 Sejam bem vindas, sejam bem vindos! ## Objetivos de hoje - O que é uma string: definição, fatiamento e comprimento - imutabilidade de strings - Codificação de caracteres - Leitura de arquivo de texto linha a linha - R Markdown ## Strings - Uma string é uma sequência de caracteres - Para criar uma string, usamos as aspas simples, ou duplas ```{r, echo = TRUE} texto <- "Este é um texto curto." texto2 <- 'Este é um texto curto.' ``` - Mas não pode-se misturar as aspas simples com duplas ## Strings - Strings podem ser concatenadas com o comando paste ```{r, echo = TRUE} texto1 <- "Olá," texto2 <- "meu" texto3 <- "nome é" texto4 <- "Roberto Hirata Jr." frase <- paste(texto1,texto2,texto3,texto4) print(frase) ``` ## Strings - O comando paste concatena com o separador " ", mas ele pode ser mudado: ```{r, echo = TRUE} texto1 <- "Olá," texto2 <- "meu" texto3 <- "nome é" texto4 <- "Roberto Hirata Jr." frase <- paste(texto1,texto2,texto3,texto4,sep="***") print(frase) ``` ## Strings - O comando paste concatena com o separador " ", mas ele pode ser mudado: ```{r, echo = TRUE} texto1 <- "Ba" texto2 <- "na" texto3 <- "na" palavra <- paste(texto1,texto2,texto3,sep="") print(palavra) ``` ## Tamanho de uma string - O número de caracteres de uma string pode ser conseguido com a função nchar ```{r, echo = TRUE} texto1 <- "Hoje está frio! Está" temperatura <-"17\u00BAC!" frase <- paste(texto1,temperatura,sep=" ") print(frase) cat("Essa frase tem ",nchar(frase)," caracteres.") ``` ## Tamanho de outros tipos de dados - A função nchar pode ser usada para contar o número de dígitos de um número ```{r, echo = TRUE} preco <- 123987 print(typeof(preco)) cat("O número ",preco," é do tipo ",typeof(preco), " e tem ",nchar(preco)," dígitos.") ``` ## Codificação de caracteres - Como vimos em uma aula anterior, dentro da memória do computador são armazenados apenas números - Para representar caracteres, precisamos codificá-los como números. - Vimos duas formas de codificação ASCII e UTF8 - Nesta URL podemos ver as codificações do UTF8 \url{https://www.utf8-chartable.de/unicode-utf8-table.pl?number=1024} ```{r, echo = TRUE} textoutf8 <- "\u00BC \u00BD \u00BE." print(textoutf8) ``` ## Codificação de caracteres e comparação de strings - Duas string são iguais se elas são iguais caractere a caractere - Dois caracteres são iguais se eles têm a mesma codificação ```{r, echo = TRUE} texto = "banana" texto2 = "laranja" print(texto==texto2) texto3 = "Banana" print(texto==texto2) texto4 = "banana" print(texto==texto4) ``` ## Codificação de caracteres e comparação de strings - Para facilitar a comparação de strings, uma estratégia é transformar as strings previamente para caixa alta (maiúsculas) - A função toupper transforma uma string para maiúsculas e a função tulower para minúsculas ```{r, echo = TRUE} texto = "BanAna" print(toupper(texto)) print(tolower(texto)) texto3 = "Banana" print(toupper(texto)==toupper(texto3)) ``` ## Substrings - Algumas vezes podemos querer pegar apenas uma parte da string - Isso pode ser feito com a função substring ```{r, echo = TRUE} texto = "MAC0113" departamento = substring(texto,1,3) codigoNum = substring(texto,4,nchar(texto)) cat("O departamento é:",departamento, " e o código é:",codigoNum) ``` ## Substrings - A função substring também serve para substituirmos parte de uma string ```{r, echo = TRUE} texto = "MAC0113" substring(texto,4,nchar(texto)) <- "0115" cat("A nova string é:",texto) ``` ## Procurando uma string dentro de uma string - Veja o help da função grep ```{r, echo = TRUE} seqProt = "GHLHGKHHCGHGCAGALLCAAAMMKHMGLKHGAGAGKGCA CKMALLKALMKCGLMLGCLGHMHGCGAAKHMCLCMLAGKAALGLCMAHHMA GLLMHMMLK" seqex <- "ACHKLMG" seqex2 = "HGKHHCGH" print(grepl(seqex,seqProt)) print(grepl(seqex2,seqProt)) ``` ## Quebrando uma frase em palavras - A função strsplit pode ser usada para separar as palavras de uma frase. ```{r, echo = TRUE} ajuda = "Texto curto para exemplificar o strplit" palavras = unlist(strsplit(ajuda," ")) for (palavra in palavras) { cat(palavra," ") } ``` ## Lendo um arquivo texto linha a linha - A função readLines lê um arquivo linha a linha ```{r, echo = TRUE} texto = readLines("emailDesesperado.txt") print(length(texto)) ``` ## Lendo um arquivo texto linha a linha ```{r, echo = TRUE} conta = 1 for (linha in texto) if (nchar(linha)!=0) { if (conta%%9!=0) { cat(nchar(linha)," ") } else { cat(nchar(linha),"\n") } conta = conta + 1 } ``` ## Lendo um arquivo texto palavra por palavra - A função scan lê um arquivo palavra por palavra ```{r, echo = TRUE} texto2 = scan("emailDesesperado.txt",quote=NULL,what="x") print(length(texto2)) ``` ## Lendo um arquivo texto palavra por palavra ```{r, echo = TRUE} conta = 1 for (palavra in texto2) if (nchar(palavra)>8) { if (conta%%15!=0) { cat(nchar(palavra)," ") } else { cat(nchar(palavra),"\n") } conta = conta + 1 } ``` ## R Markdown - Esta apresentação foi feita inteiramente em R Markdown. - Semelhante a um hipertexto, o R Markdown tem marcações para fazer apresentações bonitas e juntar código em R. - A saída pode ser um arquivo HTML, ou PDF, ou MS Word. - Se você quiser saber mais sobre este assunto, olhe: -- \url{http://rmarkdown.rstudio.com} -- \url{https://bookdown.org/yihui/rmarkdown-cookbook/} ## R Markdown no RStudio - Se você usar o RStudio, você pode criar um arquivo R Markdown - Uma vez criado, você pode apertar o botão **Knit** e o documento será gerado ## Vantagens de usar o R Markdown - Você pode incluir tabelas apenas carregando-as ```{r cars, echo = TRUE} summary(cars) ``` ## Vantagens de usar o R Markdown - Você pode fazer gráficos e juntar nas suas apresentações, ou seus relatórios ```{r pressure} plot(pressure) ``` ## Vantagens de usar o R Markdown - Você pode fazer gráficos e juntar nas suas apresentações, ou seus relatórios ```{r swiss} pairs(swiss, panel = panel.smooth, main = "swiss data", col = 3 + (swiss$Catholic > 50)) ``` ## Obrigado!