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