\documentclass[a4paper, oneside, 10pt]{article}
\usepackage[english]{babel}
\usepackage[unicode]{hyperref}
\usepackage[utf8x]{inputenc}
\usepackage{listings}
\usepackage{graphicx}
\graphicspath{{media/}}
\date{\today}
\title{}
\author{}
\begin{document}
\begin{itemize}
\item \href{http://ecor.ib.usp.br./doku.php?id=02_tutoriais:tutorial1:start}{Tutorial}
\item \href{http://ecor.ib.usp.br./doku.php?id=01_curso_atual:exercicios1}{ Exercícios}
\item \href{http://ecor.ib.usp.br./doku.php?id=03_apostila:01-intro}{ Apostila}
\end{itemize}
\section{\texorpdfstring{1a. Introdução ao R: bases da linguagem}{1a Introduao ao R bases da linguagem}}
\label{sec:1a_introduao_ao_r_bases_da_linguagem}
Antes de iniciar essa primeira aulas veja a vídeo-aula sobre o esquema do curso em \href{http://ecor.ib.usp.br./doku.php?id=01_curso_atual:start}{01_curso_atual:start}
Meu nome é Alexandre e costumo falar devagar nas vídeo-aulas. Como elas estão em um canal do Youtube é possível acelerar clicando em \texttt{Settings} (símbolo de engrenagem que aparece na barra inferior do vídeo) e em seguida em \texttt{Playback speed}. Procure a sua velocidade!
Entre as várias características que definem uma linguagem computacional está a forma como o código é implementado pelo sistema operacional, ou seja, como a linguagem do programa é transformada em linguagem de máquina. Há dois tipos básicos de implementação: compilação e interpretação. O R faz parte do segundo grupo, por isso podemos conversar com o programa a cada linha de comando. Além disso, nossa conversa com o R é definida como uma linguagem de alto nível, significando que a sintaxe é similar à linguagem humana e se distancia da linguagem da máquina que é binária, só contendo zeros e uns.
\href{https://www.freecodecamp.org/news/coding-explained-in-25-profound-comics-8847ea03819c/}{\raggedright\includegraphics[keepaspectratio=true,width=0.8\textwidth]{02_tutoriais/tutorial1/computerPrograming}
}
Outra característica do R é que ele é uma linguagem orientada a objetos, ou seja, manipulamos objetos com procedimentos inerentes à classe a que eles pertencem. Essas características do R fazem com que esse ambiente de programação seja similar a uma oficina onde matéria-prima (objetos) e ferramentas \footnote{funções também são uma classe de objetos} são manipuladas para efetuar uma tarefa que normalmente se resume na construção de outros objetos, ou \emph{'obras de arte virtuais'}. Vamos entrar nessa oficina!
\subsection{\texorpdfstring{ateliêR}{atelieR}}
\label{sec:atelier}
Vamos usar uma interface web para rodar o R. Nos quadros \textbf{rdrr.io} é possível submeter linhas de código a um servidor que interpreta o código do R e retorna o resultado da operação em uma outra janela. Caso o servidor não esteja disponível, ou a conexão da internet não seja boa, é possível rodar as linhas de código em uma sessão do R no seu computador, apenas copiando e colando as linhas de código apresentadas antes dos quadros do \textbf{rdd.io}.
O comando que vamos executar é:\lstset{frame=single, language=rsplus|, title=Hello, world!}
\begin{lstlisting}
print("Hello, world")
\end{lstlisting}
Clique no botão RUN abaixo!
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Os computeiros dizem que a primeira coisa que devemos fazer quando aprendemos uma linguagem computacional é fazê-la dizer \href{https://en.wikipedia.org/wiki/\%22Hello,_World!\%22_program}{ Hello, world!}.
Pronto, já fizemos nossa primeira tarefa na linguagem R!
No código acima, ao clicar em \textbf{RUN} enviamos o comando \texttt{print(,,Hello, world!")} para o interpretador do R e recebemos o resultado dessa operação. Apesar da simplicidade desse exemplo, temos alguns conceitos básicos da sintaxe do R que são importantes.
Note que temos no comando acima caracteres (letras, símbolos e espaços em branco) que estão agrupados entre aspas \texttt{,,Hello, world!"}. Esse é o primeiro conceito importante: \textbf{O que está entre aspas o R interpreta como sendo caracteres}. Parece óbvio, mas veja o que acontece ao rodar o código abaixo:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
print(Hello)
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
A mensagem \texttt{Error in print(Hello) : object 'Hello' not found}, significa que o R não encontrou o objeto com o nome \texttt{Hello}. Nossa segunda definição: \textbf{caracteres que não estão entre aspas o R interpreta como sendo o nome de objetos}. No caso, o objeto com o nome \texttt{Hello} não foi encontrado!
\subsection{\texorpdfstring{Atribuição}{Atribuiao}}
\label{sec:atribuiao}
Ok! E como fazemos para criar um objeto no R? Para isso usamos as funções de atribuição. Na linguagem temos 3 tipos de atribuições utilizando símbolos diferentes:
\underline{\textbf{ATRIBUIÇÃO NO R}}
\begin{itemize}
\item junção dos caracteres \textless e - : atribuição à esquerda;
\item caracter = : o mesmo que acima, atribuição à esquerda;
\item junção de - e \textgreater : atribuição à direita;
\end{itemize}
Nas regras de boas práticas de estilo da linguagem, em geral, se diz que deve-se usar a primeira forma, que a segunda é aceitável, mas que não devemos usar a terceira!
Outra boa prática de estilo da linguagem é, uma vez escolhida a forma a ser usada, usar sempre a mesma forma ao longo de seus \textbf{\emph{scripts}}. Iremos definir o que é um \textbf{\emph{script}} no item \href{http://ecor.ib.usp.br/doku.php?id=02_tutoriais:tutorial1:start\#o_codigo}{'O Código'} desse tutorial.
Vamos criar nosso primeiro objeto no R:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
Hello <- "Hello, world!"
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\textbf{Parece que nada aconteceu}, mas atribuímos ao objeto chamado \texttt{Hello} os caracteres que compõem a frase \texttt{Hello, world!}. Após criar o objeto podemos manipulá-lo ou apenas chamá-lo para exibir o que foi atribuído a ele.\lstset{frame=single, language=rsplus}
\begin{lstlisting}
Hello
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Agora temos novamente o retorno de \texttt{,,Hello, world!"}, mas dessa vez a frase vem do objeto \texttt{Hello}. Quando chamamos um objeto que existe no R ele nos retorna o que está armazenado nele.
\subsection{\texorpdfstring{Classes de objetos}{Classes de objetos}}
\label{sec:classes_de_objetos}
Todo o objeto criado em uma sessão do R é atribuído a uma classe. Isso é feito automaticamente pelo R, caso o usuário não explicite a classe do objeto na sua criação. Para acessar a classe do objeto que criamos, utilizamos a função \texttt{class}:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
Hello <- "Hello, world!"
Hello
class(Hello)
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\subsubsection{\texorpdfstring{A classe 'function'}{A classe function}}
\label{sec:a_classe_function}
No nosso primeiro código do R, havia um objeto chamado \texttt{print}. Vamos visualizar a classe a que pertence esse objeto:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
class(print)
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
O R nos diz que esse objeto é da classe função. Os objetos da classe \texttt{function} em geral estão associados a uma documentação que nos ajudam a entender como usar essa ferramenta. Para acessar a documentação no R, utilizamos outra ferramenta que é a função \texttt{help}\footnote{O caracter \texttt{?} funciona como um atalho para essa função}.\lstset{frame=single, language=rsplus}
\begin{lstlisting}
help(print)
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Uma questão interessante aqui é que estamos usando uma ferramenta, a função \texttt{help}, para manipular o objeto \texttt{print}, que por sua vez também é uma função. O que acontece se chamarmos o objeto \texttt{help} sem os parênteses?\lstset{frame=single, language=rsplus}
\begin{lstlisting}
help
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
É muito importante diferenciar o objeto que contém o código da função do procedimento ao executar essa função. A diferença entre um e outro está em um detalhe pequeno que são os parênteses (...) que acompanham o nome da função. O nome da função acompanhado dos parênteses faz com que o procedimento associado a esse objeto seja executado. Caso não seja acompanhada dos parênteses, o objeto da classe função irá retornar aquilo que está atribuído a ele: \underline{o texto de código que a função contém}.
\subsubsection{\texorpdfstring{Argumentos das funções}{Argumentos das funoes}}
\label{sec:argumentos_das_funoes}
Na documentação da função \texttt{print} há a descrição de argumentos que, entre outras coisas, flexibilizam o procedimento da função. O primeiro argumento, chamado \texttt{x} é o objeto que será manipulado, um outro argumento dessa função é o \texttt{digits}. Vamos usá-lo:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
print(x= 1.23456789, digits = 3)
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Para explicitar que estamos manipulando objetos, podemos fazer o procedimento em duas etapas, primeiro atribuindo o valor \texttt{1,23456789} a um objeto e depois solicitando para que ele seja mostrado na tela com apenas 3 dígitos.\lstset{frame=single, language=rsplus}
\begin{lstlisting}
numero <- 1.23456789
print(x= numero, digits = 3)
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\textbf{O padrão decimal do R}
\\
Note que o R utiliza o símbolo de \texttt{.} para indicar o decimal no padrão de números em Inglês. O padrão em Português, que é o uso de \texttt{,} como indicador, não funciona no R!
Agora vamos ver a diferença na manipulação que o \texttt{print} faz, dependendo da classe do objeto:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
palavra <- "1.23456789"
print(x= palavra, digits = 3)
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\subsubsection{\texorpdfstring{As classes 'numeric' e 'character'}{As classes numeric e character}}
\label{sec:as_classes_numeric_e_character}
Porque o objeto \texttt{numero} é manipulado diferentemente do objeto \texttt{palavra}? Por que são objetos de classes diferentes e a função \texttt{print} reconhece essa diferença e trata eles de forma diferente. Quanto a função manipula números (i.e. classe \texttt{numeric}) o argumento \texttt{digits} faz sentido. Quando o objeto é da classe \texttt{character} esse argumento é desprezado. Aqui tem um conceito avançado da linguagem: a função \texttt{print} executa diferentes procedimentos dependendo da classe do objeto que ela manipula.
Já vimos anteriormente que para acessar a classe a que um objeto pertence podemos usar a função \texttt{class}:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
class(numero)
class(palavra)
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Vamos agora usar uma outra função para exemplificar a sintaxe básica do R. A função em questão é \texttt{round}, que arredonda um valor numérico até a casa decimal solicitada. Diferentemente do \texttt{print}, que não modifica o valor, apenas imprime ele com o número de casa decimais solicitado, o \texttt{round}, por sua vez, faz a transformação arredondando o valor \footnote{arredondamentos podem ser danosos, principalmente para cálculos sequenciais e números pequenos}.
A primeira ação que deve ter ao utilizar uma função no R é: \textbf{\underline{SEMPRE LER A DOCUMENTAÇÃO}}.
A documentação do \texttt{round} descreve que ele também tem um argumento chamado \texttt{digits}.\lstset{frame=single, language=rsplus}
\begin{lstlisting}
outro <- round(numero, 4)
\end{lstlisting}
\textbf{\underline{Cadê o nome do argumento?}}
Note que o código acima não tem o nome dos argumentos. Estamos usando uma das regras dos argumentos no R que é a posição. Caso o nome não seja dado, o R usa a posição para atribuir o valor ao argumento. É possível usar ambas regras, posição e nome, o que é bastante comum. Uma outra regra é a do padrão único do nome simplificado. Por exemplo, o \texttt{dig = 3} será reconhecido como \texttt{digits = 3 } desde que não haja nenhum outro argumento que comece com \texttt{dig} no nome. Como sabemos a posição e nome dos argumentos? No \texttt{help}. Consulte sempre a documentação! Quase todas as funções que aparecem nos códigos do wiki estão conectadas a sua documentação por um hiperlink. Portanto, use e abuse!
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\subsubsection{\texorpdfstring{Sintaxe básica}{Sintaxe basica}}
\label{sec:sintaxe_basica}
A sintaxe básica do R pode ser definida como:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
object <- tool(x, arg2 = y, arg3 = z)
\end{lstlisting}
Podemos ler o comando acima como sendo: ,,utilize a ferramenta \texttt{tool} para manipular o objeto \texttt{ x } tendo o argumento \texttt{arg2} com o atributo \texttt{y} e a opção \texttt{arg3} como \texttt{z}. O resultado dessa manipulação é armazenado no objeto de nome \texttt{object}. Note que o R, nesse caso, não devolveria nada na tela, pois o resultado da manipulação é atribuído a um objeto \footnote{para atribuir o resultado a um objeto e ao mesmo tempo mostrar na tela, utilize parênteses iniciando e fechando a linha de comando}.
\subsection{\texorpdfstring{Estrutura e tipos de dados}{Estrutura e tipos de dados}}
\label{sec:estrutura_e_tipos_de_dados}
Até aqui vimos dois tipos de informação que podem ser manipuladas no R: caracteres e números.
Os números, por sua vez, podem ser de dois tipos: números com decimais (\texttt{numeric}) e inteiros (\texttt{integer}). Essa distinção é importante para a maneira como o R armazena essa informação na memória do computador, de resto elas funcionam como números racionais na matemática clássica.
No capítulo seguinte vamos tratar das funções matemáticas mais a fundo. Aqui vamos apenas ver as bases conceituais dos tipos de dados básicos e qual a estrutura básica de armazenamento em objetos. As operações da álgebra básicas no R usam os mesmos símbolos que na matemática tradicional: \texttt{+}, \texttt{-}, \texttt{/} e \texttt{*}. \lstset{frame=single, language=rsplus}
\begin{lstlisting}
10 + 10
10 - 10
10 / 10
10 * 10
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Como vimos na seção anterior podemos atribuir valores numéricos a um objeto. Depois disso, podemos manipular os valores indiretamente por intermédio do objeto. \lstset{frame=single, language=rsplus}
\begin{lstlisting}
dez <- 10
dez + dez
dez - dez
dez / dez
dez * dez
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Atribuímos o valor \texttt{10} ao objeto \texttt{dez} e depois manipulamos o objeto \texttt{dez}. Isso não parece ser uma vantagem. Estamos trocando dois dígitos, o valor \texttt{10}, por um objeto que contém 3 letras, o \texttt{dez}. A vantagem começa quando atribuímos o resultado de operações a um outro objeto.\lstset{frame=single, language=rsplus}
\begin{lstlisting}
cem <- dez * dez
dezmil <- cem * cem
cem
dezmil
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\subsubsection{\texorpdfstring{Vetores}{Vetores}}
\label{sec:vetores}
Ficaria ainda melhor se pudéssemos operar mais de um valor de uma vez. Como armazenar mais de um valor em um objeto? Usamos a função \texttt{c} que significa \texttt{c}oncatenar ou \texttt{c}ombinar. Os elementos combinados são a estrutura básica de dados no R, que é o objeto da classe \texttt{vector}. Esse é o elemento básico dos objetos no R. Mesmo que o objeto só tenha um elemento, trata-se de um vetor com comprimento igual a um. \lstset{frame=single, language=rsplus}
\begin{lstlisting}
contadez <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
contadez
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\paragraph{\texorpdfstring{Indexação de Vetores}{Indexaao de Vetores}}
\label{sec:indexaao_de_vetores}
Note que, antes de iniciar a apresentação dos valores que estão no vetor \texttt{contadez} o R apresenta o valor 1 entre colchetes \texttt{[1]}. Caso o nosso vetor fosse longo e tivesse que ser apresentado em várias linhas, outros valores em colchetes iriam iniciar essa outras linhas de apresentação dos dados. Esses valores representam a indexação do elemento que inicia a linha de apresentação do conteúdo do vetor. Ou seja, o elemento na posição 1, no nosso caso é o valor \texttt{1}.
Vamos inverter esse vetor, em seguida combiná-lo com o vetor anterior!\lstset{frame=single, language=rsplus}
\begin{lstlisting}
invertedez <- rev(contadez)
descontadez <- c(invertedez, contadez)
descontadez
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Agora, como fazemos para acessar elementos específicos dentro desse vetor? Para isso usamos a indexação de posição.
\textbf{\emph{Por padrão no R o primeiro elemento de um vetor está na posição 1}}.
Essa frase pouco informativa é um detalhe importante. Em muitas linguagens computacionais, diria até que a maioria das linguagens mais populares, a indexação começa pela posição definida como \texttt{0} (zero)! Mais a frente vamos usar outras indexações de vetores e de outras classes de objetos de dados. Abaixo temos alguns exemplos, simples para vetores:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
descontadez
descontadez[7]
descontadez[c(1, 5, 10, 20)]
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\subsubsection{\texorpdfstring{A classe 'Date'}{A classe Date}}
\label{sec:a_classe_date}
Crie objetos com as datas do tri e tetracampeonatos mundiais do Brasil\footnote{fonte: \href{http://pt.fifa.com/worldcup/archive/}{FIFA} }:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
copa70 <- "21/06/70"
copa94 <- "17/07/94"
\end{lstlisting}
Qual a diferença em dias entre essas datas? A subtração retorna um erro (verifique):\lstset{frame=single, language=rsplus}
\begin{lstlisting}
copa94 - copa70
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Esse erro acontece porque os objetos são caracteres, uma classe que obviamente não permite operações aritméticas. Já sabemos verificar a classe de um objeto, digitando o código:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
class(copa70)
class(copa94)
\end{lstlisting}
O resultado seria \texttt{character} para ambos!
Mas o R tem uma classe para datas, que é \texttt{Date}. Vamos fazer a coerção \footnote{procedimento de transformar uma classe em outra} dos objetos para esta classe, verificar se a coerção foi bem sucedida, e repetir a subtração. O código para isso está descrito abaixo: \lstset{frame=single, language=rsplus}
\begin{lstlisting}
copa70 <- as.Date(copa70, format = "%d/%m/%y")
copa94 <- as.Date(copa94, format = "%d/%m/%y")
class(copa70)
class(copa94)
copa94 - copa70
\end{lstlisting}
\textbf{NOTA:} o argumento \texttt{format} da função \texttt{as.Date} informa o formato em que está o conjunto de caracteres que deve ser transformado em data, no caso dia/mês/ano (\texttt{\%d/\%m/\%y}), todos com dois algarismos. Veja a ajuda da função para outros formatos.
Inclua na janela do R online abaixo o código que gera os objetos \texttt{copa70} e \texttt{cop94}, em seguida verifique a classe a que pertencem, e depois faça a transformação para a classe \texttt{Date} e a subtração entre eles.
\underline{\textbf{Comentando meu código}}
Ao submeter uma linha de comando ao R é possível incluir comentários usando o símbolo de \texttt{ \# }. O hashtag ou sustenido indica ao R que a partir daquele ponto até o final da linha o código não deve ser interpretado.
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\subsubsection{\texorpdfstring{A classe 'logical'}{A classe logical}}
\label{sec:a_classe_logical}
Até o momento, vimos algumas naturezas de informação que podemos armazenar e manipular no R: caracteres, datas e números. Uma outra natureza importante de dado básico no R é chamada de lógica.
As palavras \texttt{TRUE} e \texttt{FALSE} e também as abreviações \texttt{T} e \texttt{F} são reservadas para esse fim. Uma questão importante dos dados lógicos é que a eles também são associadas os valores 0 e 1, para \texttt{FALSE} e \texttt{TRUE}, respectivamente. Veja abaixo como podemos operá-los algebricamente:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
TRUE + TRUE
TRUE / FALSE
TRUE * FALSE
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Além disso, o R retorna \texttt{TRUE} ou \texttt{FALSE} quando fazemos algum procedimento utilizando operadores lógicos.
\textbf{\underline{Operadores Lógicos}}
\begin{itemize}
\item \texttt{==} : igual
\item \texttt{!=} : diferente
\item \texttt{ \textgreater } : maior que
\item \texttt{ \textless } : menor que
\item \texttt{\textgreater =} : maior ou igual
\item \texttt{\textless =}: menor ou igual
\item \texttt{ | } : uma das condições
\item \texttt{ \& } : ambas as condições
\end{itemize}
Alguns exemplos de operações lógicas no R:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
numero <- 1.23456789
numero < 1
numero > 1
## abaixo primeiro imprime o valor e depois faz o teste lógico
print(numero, digits = 4) == numero
round(numero, digits = 4) == numero
numero > 1 & log(numero) > 1
numero > 1 | log(numero) > 1
\end{lstlisting}
\textbf{NOTA:} Note que a igualdade é definida por dois caracteres de igualdade: "==,,. Se usarmos apenas um carácter de igualdade no R isso será interpretado como uma atribuição, como o sinal "$\leftarrow$,,.
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
A operação lógica também funciona com vetores, obedecendo a posição dos elementos:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
contadez <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
invertedez <- rev(contadez)
invertedez
invertedez > contadez
\end{lstlisting}
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\subsubsection{\texorpdfstring{A classe 'factor'}{A classe factor}}
\label{sec:a_classe_factor}
Para a melhor compreender essa classe de objetos no R, o Prof. Alexandre preparou uma vídeo-aula específica, disponível abaixo.
Imagine um experimento em que classificamos as plantas em uma escala de herbivoria com os níveis: ,,alto", ,,médio", ,,baixo" e ,,nulo". Vamos criar um objeto que representa o valor desta medida de herbivoria em uma amostra de 14 plantas:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
herb <- c("A", "M", "M", "A", "A", "M", "M", "B", "A", "A", "A", "A", "B", "A")
\end{lstlisting}
E então criar um objeto da classe fator com estes valores:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
herbFactor <- factor(herb)
\end{lstlisting}
Usamos a função \texttt{table} para contar o número de observações em cada nível do fator, cujo resultado atribuímos a um outro objeto. Os valores são exibidos se digitamos o nome do objeto.\lstset{frame=single, language=rsplus}
\begin{lstlisting}
herbTable <- table(herbFactor)
herbTable
\end{lstlisting}
A função para gerar gráficos \texttt{plot} pode ser aplicada diretamente ao objeto desta tabela:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
plot(herbTable)
\end{lstlisting}
\textbf{ Rode o código abaixo e avalie o que está sendo produzido em cada linha de comando }. Caso fique com dúvidas a primeira coisa a fazer é consultar o \texttt{help()} da função. O quadro onde temos o código abaixo, pode ser editado e pode rodar novamente com outro código. Fique à vontade para explorar a documentação das funções que estamos apresentando.
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
Note que na tabela e na figura os níveis não estão ordenados da forma como deveriam e falta o nível de herbivoria nula. Isto acontece porque, ao criar uma variável de fator a partir de um vetor de valores, o R cria níveis apenas para os valores presentes, e ordena estes níveis alfabeticamente. Caso um nível não tenha sido observado nos dados, ele fica de fora da variável, mas o correto seria ele ter a contagem como \texttt{0 }.
Para ordenar o fator e incluir um nível que não foi representado na amostra usamos o argumento \texttt{levels} da função \texttt{fator}:\lstset{frame=single, language=rsplus}
\begin{lstlisting}
herbFactor <- factor(herb, levels = c("N", "B", "M", "A"))
\end{lstlisting}
Modifique o código da janela acima, incluindo o argumento \texttt{levels} na função \texttt{factor} e rode novamente o código todo na janela abaixo.
\lstset{frame=single, language=HTML}
\begin{lstlisting}
\end{lstlisting}
\textbf{NOTA:} há uma classe para fatores ordenados que poderia se aplicar aqui, mas seu uso tem implicações importantes nos resultados de algumas análises, que no momento não vêm ao caso. Mais informações a respeito na ajuda da função: \texttt{help(factor)}.
\subsection{\texorpdfstring{O Código}{O Codigo}}
\label{sec:o_codigo}
Antes de continuar a introdução aos conceitos básicos do R, vamos entender uma conduta importante em programação. Um dos primeiros hábitos que você deve adquirir para trabalhar com o R é \textbf{não digitar os comandos diretamente no console do R\footnote{Console é a interface de interação com o interpretador da linguagem: recebe o comando, envia ao interpretador e retorna a resposta. O que vínhamos usando no início desse tutorial é um interpretador online do R}}, e sim em um arquivo texto, que chamamos de \textbf{\emph{script}} ou \textbf{\emph{código}}. Essa intermediação entre o texto do comando e o interpretador, feita pelo script, é importante pois garante que o que está sendo direcionado ao R é armazenado no arquivo texto. Esse arquivo pode ser salvo, como um registro do procedimento executado, mas principalmente para que ele possa ser utilizado e melhorado sempre que necessário.
\textbf{\underline{Reprodutibilidade do procedimento}}
Quando trabalhamos em uma planilha eletrônica, a partir de dados brutos, podemos salvar os gráficos ou os dados modificados após manipulados. Entretanto, o procedimento não é salvo. Se precisar fazer o mesmo procedimento para outro conjunto de dados precisará lembrar todas as etapas e a ordem em que foram executadas. Em programação, o script é nosso roteiro do procedimento que foi executado. Para repetir um procedimento é só executar novamente o script. Isso incrementa muito a reprodutibilidade do nosso procedimento, uma qualidade muito importante para a ciência de um modo geral. Por isso, deste ponto do curso em diante, iremos abandonar a interface do R online que estávamos usando até então para trabalhar através de scripts ou códigos!
\subsubsection{\texorpdfstring{Editor de Código}{Editor de Codigo}}
\label{sec:editor_de_codigo}
\href{https://www.freecodecamp.org/news/coding-explained-in-25-profound-comics-8847ea03819c/}{\raggedleft\includegraphics[keepaspectratio=true,width=0.8\textwidth]{02_tutoriais/tutorial1/codeDeadline}
}
Um editor de código nada mais é do que um editor de texto puro como o bloco de notas do Windows. Algumas funcionalidades são bem vindas, como por exemplo, enviar a linha de código diretamente para o console do R sem a necessidade de copiar e colar.
A instalação básica do R contém uma interface gráfica de usuário (R-GUI) simples, tanto no Windows como no IOS/Mac, que acompanha um editor de códigos.
O editor de códigos do R-GUI no Windows ou Mac é bastante simples e costuma ser uma boa opção para usuários iniciantes do R. Para esta disciplina esse editor é suficiente.
No Linux não há uma \href{http://en.wikipedia.org/wiki/GUI}{GUI} padrão para o R, e esta escolha deve ser feita logo no início.
Na página de material de apoio há uma seção com várias \href{http://ecologia.ib.usp.br/bie5782/doku.php?id=01_curso_atual:material:start\#interfaces_para_o_r}{dicas sobre interfaces para o R} para lhe ajudar.
A figura abaixo é uma captura de tela do R-GUI do Windows, mas no MAC o editor é similar, e você pode manter a mesma lógica. Deixe sempre uma janela de código aberta acima da janela do R, como na imagem abaixo:
\centering\includegraphics[keepaspectratio=true,width=0.8\textwidth]{02_tutoriais/script_e_r-windows}
\textbf{\underline{Interface de usuário R-GUI}}
Na figura acima há duas janelas com funcionamentos e objetivos muito distintos.
\begin{enumerate}
\item a janela da parte superior apresenta um arquivo de texto puro que pode ser editado e salvo como texto. Por padrão salvamos esses arquivos com a extensão \texttt{.r} ou \texttt{.R} para reconhecermos que é um script da linguagem R. O sistema operacional deve reconhecer a extensão com sendo do R automaticamente.
\item a janela na parte inferior é o console do R, ou seja o programa propriamente dito. Essa janela recebe os comandos de código e envia ao interpretador do R, que por sua vez, retorna o resultado final do processamento\footnote{quando a tarefa solicitada é a representação de um gráfico, uma nova janela é aberta, um dispositivo gráfico. }.
\end{enumerate}
Para evitar confusão e perda de trabalho é importante digitar as informações que serão transmitidas ao R (linhas de código) no arquivo texto e ir enviando esses comandos ao console R. Uma boa prática também é comentar as linhas de código para que outras pessoas, ou mesmo a pessoa que criou o código, possam entender ou lembrar o que cada parte ou linha do código executa.
É imprescindível aprender a se organizar dentro do ambiente de programação, para evitar o risco de perder trabalho ou ficar perdido entre as tarefas executadas.
\subsubsection{\texorpdfstring{O primeiro Script}{O primeiro Script}}
\label{sec:o_primeiro_script}
O exercício final deste tutorial é produzir um script que você terá de salvar e submeter para avaliação. Assim, siga atentamente as instruções nos pontos abaixo.
\begin{itemize}
\item Copie todas as linhas de códigos que foram processados nesse tutorial até o momento em arquivo texto simples no bloco de nota do Windows ou algum outro programa simples de texto (TextEdit no macOS);
\item Salve o arquivo em uma pasta \footnote{diretório de trabalho é o nome técnico desta pasta para o R} conhecida do seu computador, associada a essa disciplina, com o nome e extensão \texttt{tutorial01.r} \footnote{quando o sistema operacional não mostra a extensão dos arquivos é preciso configura-lo para que seja apresentado};
\itemExecute o R e abra o \emph{script} que salvou, utilizando a opção do menu ,,Arquivo/Abrir script":
\end{itemize}
\centering\includegraphics[keepaspectratio=true,width=0.8\textwidth]{02_tutoriais/abrir_script}
\begin{itemize}
\item Vá para a janela do \emph{script}, coloque o cursor na primeira linha e tecle \texttt{Ctrl-r}. Faça o mesmo com as linhas seguintes;
\end{itemize}
\emph{\textbf{\underline{Para Usuários de MAC}}}
Para enviar comandos do editor de código do R-GUI para o R utilize \emph{Command+Enter} ou \emph{Command+Return}.
Veja o material \href{https://cran.r-project.org/bin/macosx/RMacOSX-FAQ.html}{ RMacOSX}
\begin{itemize}
\item Coloque o título no arquivo como sendo \texttt{\#\# Tutorial Introducao ao R }
\item Na linha seguinte coloque a data como comentário: \texttt{\#\# Data: ....};
\item Comente cada bloco de código com o nome do tópico que o código está associado no roteiro
\item Comente ou retire qualquer linha de código que tenha gerado erros durante o processamento;
\item Retire a redundância na atribuição dos abjetos, mas cuidado com objetos que são sobrescritos, veja o \texttt{copa70}, por exemplo;
\item Ao final selecione todas as linhas do script, inclusive comentários e e tecle \texttt{Ctrl-r} para submeter tudo ao interpretador do R;
\item Garanta que não há mensagens de erro ao longo do processamento do script.
\end{itemize}
\includegraphics[keepaspectratio=true,width=0.8\textwidth]{02_tutoriais/envia_comando_do_script}
\textbf{\underline{Comentários no código}}
Para fazer comentários no código, usamos o símbolo de \texttt{\#}.
Qualquer conteúdo na linha de comando depois do \texttt{\#} não é interpretado pelo R. Utilizamos os comentários, em geral, para tornar o código autoexplicativo.
\begin{itemize}
\item Salve o \emph{script} com estas modificações.
\end{itemize}
Você terá que submeter o \emph{script} salvo no nosso sistema de correção automática de código, chamado \textbf{notaR}. Portanto, que o arquivo foi salvo corretamente.
Siga para a aba de \href{http://ecor.ib.usp.br./doku.php?id=01_curso_atual:exercicios1}{exercícios} para seguir os exercícios desse tópico. Os exercícios ficarão embutidos nesse wiki, mas deixaremos sempre o link para o notaR caso prefiram abrir a plataforma diretamente. \textbf{Lembre-se de logar no sistema notaR} antes de fazer os exercícios e não deixe de passar pela aba da apostila, pois ela é complementar aos \href{http://ecor.ib.usp.br./doku.php?id=03_apostila:01-intro}{tutoriais}, apesar de possuir alguma redundância desejável para melhor fixar o conteúdo das atividades.
\end{document}