B.1 Amostras pequenas de dados
B.1.1 scan()
A função scan()
também pode ler dados de arquivos, mas a sua saída é um vetor, ou seja ela não mantém a estrutura dos dados contidos no arquivo.
Vamos baixar um arquivo de dados da internet para ilustrar o uso da scan()
.
# download dados de exemplo
aq_url <- "https://raw.githubusercontent.com/lhmet/adar-ufsm/master/data/airquality.txt"
# arquivo temporário, você pode substituir tempfile() por um caminho de seu computador, p.ex. "~/Downloads"
(aq_dest_file <- tempfile())
download.file(aq_url, destfile = aq_dest_file)
# Exemplo: vetor
vetor_aq <- scan(aq_dest_file)
# parte inicial dos dados
head(vetor_aq, 100)
# parte final
tail(vetor_aq, 100)
# dados são importados como vetor
is.vector(vetor_aq)
mode(vetor_aq)
B.1.2 readline()
Para ler apenas uma linha de dados a partir do teclado como character
usamos a função readline()
:
sentenca <- readline(prompt = "digite alguma coisa e tecle enter para continuar: ")
sentenca
Esta função pode ser utilizada como uma forma de controlar um looping. Esse exemplo ilustra o uso da função lapply()
para execução de laços ou loopings ao longo de um vetor de índices. Essa função será vista futuramente no curso.
# para reprodutibilidade
set.seed(123)
# looping ao longo da sequência de 1 a 5
l <- sapply(
1:5,
function(i) {
# cria vetor com números aleatórios com distribuição uniforme
x <- runif(n = 100, min = 1, max = 50)
# anomalia acumulada
y <- cumsum(x - mean(x))
plot(y, type = "o")
abline(h = 0, lty = 2)
# leitura de linha, só após teclar enter vai gerar próximo gráfico
readline(prompt = "tecle <enter> para continuar: ")
}
)
l
B.1.3 Impressão na tela
No modo interativo do R podemos imprimir os valores de um objeto na tela digitando o nome do objeto.
x <- 1:3
y <- x ^ 2
y
# ou
print(y)
Entretanto isso não é possível quando precisamos mostrar o valor de uma variável dentro do corpo de uma função ou dentro de um laço (looping). Nesse caso podemos usar a função print()
:
# dentro de uma função
# digitando o nome do objeto não imprimi na tela
fcubo <- function(x) {
classe <- class(x)
# intenção de mostrar objeto de entrada
classe
x ^ 3
}
fcubo(2)
# adicionando print
cubo <- function(x) {
# mostra objeto de entrada
classe <- class(x)
print(classe)
x ^ 3
}
fcubo(-3) # não imprime classe do objeto de entrada
cubo(-3) # imprime classe do objeto de entrada
B.1.3.1 cat()
ao invés de print()
É melhor usar a função cat()
ao invés da função print()
, já que a print()
permite a impressão de apenas um único objeto enquanto a cat()
não. Compare os resultados das duas funções:
print("abc")
cat("abc\n") # \n indica quebra de linha
x
cat("os elementos de x são: ", x, "\n")
cat("os elementos de x são: ", x, sep = "")
cat("os elementos de x são: ", x, sep = "\n")
k <- c(5, 12, 13, 8, 88)
cat(k, sep = c(".", "___", " ---> ", "\n", "\n"))
B.1.4 textConnection()
Imagine que você tivesse recebido essa amostra de dados por e-mail:
dates cidade temperatura chuva
2013-01-01 SM 13 3
2013-01-01 SS 30 10
2013-01-01 CV 22 12
Para converter essa pequena amostra de dados em um dataframe nós podemos selecionar, copiar e colar o texto no primeiro argumento da função textConnection
, e então usar a função read.table
.
texto <- " dates cidade temperatura chuva
2013-01-01 SM 31 3
2013-01-01 SS 35 10
2013-01-01 CV 21 14"
# conexão de texto
tc <- textConnection(object = texto)
tc
x <- read.table(file = tc, header = TRUE)
x