\documentclass[a4paper, oneside, 10pt]{article}
\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{listings}
\date{\today}
\title{}
\author{}
\begin{document}

\lstset{frame=single, language=rsplus}
\begin{lstlisting}


##CRIACAO DA FUNCAO
analisar <- function(x, indices = c("Shannon", "Simpson"), grafico = TRUE, save.csv = TRUE){         #Estrutura da funcao.
  dados.brutos <- read.csv(x, header=TRUE,sep=";", as.is=TRUE, na.strings = c(""))                   #Leitura de planilha de input, incluindo NAs em celulas vazias, caso haja.
  if(length(indices) >= 1 & length(indices[indices == "Shannon" | indices == "Simpson"]) == 0){      #Criacao de mensagem de erro, caso nenhum indice ou indice incorreto seja incluido.
    stop("\t Indices incorretos! Favor indicar quais os indices a serem calculados. \n")    
  }
  if(length(dados.brutos[is.na(dados.brutos)]) >= 1){                                                #Criacao de mensagem de atencao, caso NAs (celulas vazias) sejam encontrados na planilha. 
    warning("\t Atencao: Celulas vazias (NAs) presentes! Observacoes contendo NAs foram desconsideradas da analise. \n")
  }

##CALCULO DA ABUNDANCIA TOTAL DE ESPECIMES REGISTRADOS
  abundancia.total <- length(dados.brutos$nome_cientifico[!is.na(dados.brutos$nome_cientifico)])      #Calculo da abundancia total de especimes registrados, considerando todos os locais de amostragem.

##CALCULO DA RIQUEZA TOTAL DE ESPECIES REGISTRADAS
  riqueza.total <- length(unique(dados.brutos$nome_cientifico[!is.na(dados.brutos$nome_cientifico)])) #Calculo da riqueza total de especies a partir dos especimes registrados, considerando todos os locais de amostragem.

##CALCULO DA ABUNDANCIA POR LOCAL (AREA DE AMOSTRAGEM)
  abundancia.local <- table(dados.brutos$local,dados.brutos$nome_cientifico)        #Separando dados de abundancia das especies por locais de amostragem, para posterior calculo da abundancia por local de amostragem.
  abundancia.local.1 <- apply(abundancia.local, MARGIN = 1, FUN = sum)              #Calculo da abundancia por local de amostragem.

##CALCULO DA RIQUEZA POR LOCAL (AREA DE AMOSTRAGEM)
  nomes_areas <- rownames(abundancia.local)                    #Selecao de nomes das areas de amostragem preenchidas na coluna "local", para criacao de dataframe que contera valores de riqueza por local.
  riqueza.local <- data.frame(nomes_areas, "riqueza" = 0)      #Criacao de dataframe com valores de riqueza = zero para serem preenchidos com valores de riqueza calculados para cada local.
  for(i in 1:nrow(abundancia.local)){                          #Preenchimento da coluna denominada riqueza no dataframe criado com a contagem do numero de especies por local, isso considerando a soma de valores maiores que zero nas linhas do dataframe "abundancia.local". 
    riqueza.local$riqueza[i] <- length(abundancia.local[i,abundancia.local[i,] > 0])
  }

##CRIACAO DE GRAFICO DE ABUNDANCIA RELATIVA DAS ESPECIES, CONSIDERANDO TODOS AS AREAS DE AMOSTRAGEM (LOCAIS) CONJUNTAMENTE
  abundancia.especie <- data.frame(table(dados.brutos$nome_cientifico))                                         #Calculo da abundancia por especie,considerando todas as areas de amostragem (locais), para posterior elaboracao do grafico de abundancia relativa das especies.
  abundancia.especie["porcent"] <- c((abundancia.especie$Freq*100)/sum(abundancia.especie$Freq))                #Inclusao de nova coluna no dataframe denominado "abundancia.especie" contendo os valores de abundancia relativa por especie(porcentagem).
  abundancia.especie.ord <- abundancia.especie[order(abundancia.especie$porcent, decreasing=T), ]               #Organizacao do dataframe em ordem decrescente de abundancia relativa (porcentagem).
  if(grafico == TRUE){                                                                                          #Elaboracao de grafico de abundancia relativa das especies, se consideradas todas as areas de amostragem conjuntamente, caso essa opcao seja escolhida pelo usuario.
    png("Grafico_Abundancia.Relativa.png")                                                                                          #Caso opcao de confeccao do grafico seja escolhida pelo usuario, o mesmo sera salvo automaticamente no diretorio em uso.
    par(mar = c(13.1,4.1,4.1,2.1))                                                                              #Controle do tamanho das margens do grafico.
    plot(abundancia.especie.ord$porcent,pch=19,col="black",ylab="Abundancia Relativa das Especies", xlab = "",ylim=c(0,100),tcl=-0.5,cex.lab=1, xaxt = "n")   #Plotagem e formatacao dos pontos, titulo dos eixos, formatacao dos ticks do eixo y, nao inclusao de titulo no eixo x.
    axis(side = 1, at = c(1:length(abundancia.especie.ord$Var1)), labels = FALSE)                               #Preparando eixo x para receber nome das especies.
    text(abundancia.especie$Var1,-50,xpd = TRUE,labels= abundancia.especie.ord$Var1, srt=90,cex=1, font = 3 )   #Inclusao e formatacao da legenda eixo x = nome das especies.
    par(mar=c(5.1,4.1,4.1,2.1))                                                                                 #Retornando margens do grafico para padrao do R, para caso outro grafico seja produzido posteriormente, fora desta funcao.
    dev.off()                                                                                                   #Fechamento de janela de grafico.
  }

##RETORNANDO RESULTADOS DE ABUNDANCIA(TOTAL E LOCAL)E RIQUEZA (TOTAL E LOCAL)
  resultado.final <- data.frame("Abundancia" = abundancia.local.1, "Riqueza" = riqueza.local$riqueza)   #Criacao de um dataframe contendo valores de abundancia e riqueza para cada area amostrada (local).
  linha.total <- c(abundancia.total,riqueza.total)                                                      #Criacao de um vetor contendo valores de abundancia e riqueza total, ou seja, considerando todas as areas de amostragem (locais) conjuntamente.
  resultado.final["Total",] <- c(linha.total)                                                           #Criacao de uma linha de "Total" contendo abundancia e riqueza total, para insercao no dataframe criado.
  resultado.final                                                                                       #Insercao da linha de "Total" criada no dataframe contendo os resultados.

##PREPARANDO VALORES DE INPUT PARA CALCULO DOS INDICES
  abundancia.especie.1 <- apply(abundancia.local, MARGIN = 2, FUN = sum)    #Calculo da abundancia por especie, considerando todas as areas de amostragem (locais) conjuntamente.
  prop <- abundancia.especie.1/sum(abundancia.especie.1)                    #Calculo da proporcao da especie i em relacao ao numero total de individuos na amostra, para calculo de Indice de Shannon e de Simpson, considerando todas as areas de estudo conjuntamente (locais).
  total.especies <- riqueza.total                                           #Calculo do numero total de especies, o qual sera utilizado para calculo dos valores de equitabilidade de Shannon ou de Simpson.
    
##CALCULO DOS INDICES DE DIVERSIDADE E EQUITABILIDADE DE SHANNON
  if(length(indices[indices == "Shannon"]) >= 1){                           #Calculo de indice de diversidade e equitabilidade de Shannon, se consideradas todas as areas de amostragem conjuntamente (locais), se este for o conjunto de indices escolhido pelo usuario.
    shannon.total <- -sum(prop*log(prop))                                   #Calculo da diversidade de Shannon.
    equitabilidade.shannon.total <- shannon.total/log(total.especies)       #Calculo da equitabilidade de Shannon.

    #Calculo do indice de diversidade de Shannon para cada area de amostragem (local), considerando a proporcao de cada especie, por cada area de amostragem (local), a partir da selecao de dados de todas as colunas do dataframe "abundancia.local" (informacoes de especies), para todas as linhas do mesmo dataframe (informacoes de local).
    shannon.local <- c()   
    x <- c()
    for(k in 1:nrow(abundancia.local)){
      for(j in 1:ncol(abundancia.local)){
        x[j] <- abundancia.local[k,j]/sum(abundancia.local[k,])
      }
      x <- x[x!=0]                                                          #Porque nao existe logaritmo de zero.
      shannon.local[k] <- -sum(x*log(x))
      x <- c()
    }
    
    #Calculo do indice de equitabilidade de Shannon para cada area de amostragem (local). 
    equitabilidade.shannon.local <- c()
    for(l in 1:nrow(abundancia.local)){
      equitabilidade.shannon.local[l] <- shannon.local[l]/log(riqueza.local$riqueza[l])
    }
    
    #Retornando resultados do conjunto de indices escolhido pelo usuario: Shannon
    resultados.1 <- c(shannon.total)
    resultados.2 <- c(shannon.local)
    resultados.3 <- c(equitabilidade.shannon.total)
    resultados.4 <- c(equitabilidade.shannon.local)
    
    diversidade <- c(resultados.2,resultados.1)                            #Criacao de um vetor com os valores do indice de diversidade de Shannon, por local e total (todas os locais conjuntamente).
    diversidade
    resultado.final
    resultado.final[,"Diversidade de Shannon"] <- diversidade              #Inclusao de coluna com os indices de diversidade de Shannon, por local e total, no dataframe de resultados de riqueza e abundancia já criado.
    resultado.final
    
    equitabilidade <- c(resultados.4,resultados.3)                         #Criacao de um vetor com os valores do indice de equitabilidade de Shannon, por local e total (todos os locais conjuntamente).
    equitabilidade
    resultado.final
    resultado.final[,"Equitabilidade de Shannon"] <- equitabilidade        #Inclusao de coluna com os indices de equitabilidade de Shannon, por local e total, no dataframe de resultados de riqueza e abundancia já criado.
    resultado.final
  }

##CALCULO DOS INDICES DE DIVERSIDADE E EQUITABILIDADE DE SIMPSON
  if(length(indices[indices == "Simpson"]) >= 1){                          #Calculo de indice de diversidade e equitabilidade de Simpson, se consideradas todas as areas de amostragem conjuntamente (locais), se este for o conjunto de indices escolhido pelo usuario.
    simpson.total <- sum((prop)^2)                                         #Calculo de indice de diversidade de Simpson.
    equitabilidade.simpson.total <- (1/simpson.total)/total.especies       #Calculo do indice de equitabilidade de Simpson.
    
    #Calculo do indice de diversidade de Simpson para cada area de amostragem (local), considerando a proporcao de cada especie, por cada area de amostragem (local), a partir da selecao de dados de todas as colunas do dataframe "abundancia.local" (informacoes de especies), para todas as linhas do mesmo dataframe (informacoes de local).
    simpson.local <- c()    
    y <- c()
    for(m in 1:nrow(abundancia.local)){
      for(n in 1:ncol(abundancia.local)){
        y[n] <- abundancia.local[m,n]/sum(abundancia.local[m,])
      }
      simpson.local[m] <- 1 - sum((y)^2)
    }
    
    #Calculo do indice de equitabilidade de Simpson para cada area de amostragem (local). 
    equitabilidade.simpson.local <- c()
    for(o in 1:nrow(abundancia.local)){
      equitabilidade.simpson.local[o] <- (1/simpson.local[o]) / riqueza.local$riqueza[o]
    }

    #Retornando resultados do conjunto de indices escolhido pelo usuario: Simpson
    resultados.1 <- c(simpson.total)
    resultados.2 <- c(simpson.local)
    resultados.3 <- c(equitabilidade.simpson.total)
    resultados.4 <- c(equitabilidade.simpson.local)
  
    diversidade <- c(resultados.2,resultados.1)  				   #Criacao de um vetor com os valores do indice de diversidade de Simpson, por local e total (todas os locais conjuntamente).
    diversidade
    resultado.final
    resultado.final[,"Diversidade de Simpson"] <- diversidade 		   #Inclusao de coluna com os indices de diversidade de Simpson, por local e total, no dataframe de resultados de riqueza e abundancia já criado.
    resultado.final
  
    equitabilidade <- c(resultados.4,resultados.3)				   #Criacao de um vetor com os valores do indice de equitabilidade de Shannon, por local e total (todos os locais conjuntamente).
    equitabilidade
    resultado.final
    resultado.final[,"Equitabilidade de Simpson"] <- equitabilidade	   #Inclusao de coluna com os indices de equitabilidade de Shannon, por local e total, no dataframe de resultados de riqueza e abundancia já criado.
    resultado.final
  }
  #Se escolhida a opcao de salvar automaticamente no diretorio de trabalho um arquivo .csv denominado "Resultados_Finais" contendo todos os resultados calculados (riqueza total e local, abundancia total e local e diversidade total e local, conforme indice(s) escolhido(s)).
  if(save.csv == TRUE){ 
    write.table(resultado.final,file="Resultados_Finais.csv",sep=";") 
  }
  return(resultado.final)                                                  #Retornando dataframe final, contendo todos os resultados calculados e escolhidos pelo usuário.
}

\end{lstlisting}



\end{document}
