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



\section{\texorpdfstring{TRABALHO FINAL}{TRABALHO FINAL}}
\label{sec:trabalho_final}


\textbf{\emph{Zoobodymass()}}\lstset{frame=single}
\begin{lstlisting}
 
Zoobodymass=function(x, level.abundance = "", level.length = "", level.order = "", graphic = TRUE) #função com os argumentos. 
#argumentos: x = dados de natureza data.frame; level.abund = nome da coluna com os valores de abunância; level.a = nome da coluna com os valores de comprimento; order = nome da coluna com a ordem zooplanctônica (cladocera ou copepoda); graphic = plot da relação entre abunância e o comprimento.
  
{ 
  if(class(x)!="data.frame") #condição para entrada de dados de natureza data.frame.("Se a natureza do objeto for diferente de um data.frame")
  
    {
    stop("OPS... o objeto não é um data.frame!") #caso não seja um data.frame, a função não irá rodar e irá aparecer essa mensagem no console.
    }
  
  if(any(is.na (x[,c(level.abundance, level.length, level.order)]))) #condição para remover as linhas com dados ausentes (NA) das colunas "abundance", "length" e "order". ("Se existir alguma linha das colunas de abundância, comprimento e ordem com valores faltantes")
  
    {
    x=na.omit(x) #removendo as linhas com NA das colunas "abundance", "length" e "order".
    print("Foi removido linhas com NA.") #para aparecer uma mensagem, caso tenha encontrado linhas com dados ausentes e tenha removido.
    }
  
  if(any(x[, level.abundance] ==0)) #condição para remover as linhas com zero da coluna "abundance". ("Se existir alguma linha da coluna de abundância com valores iguais a zero")
    
    {
    x=x[x[, level.abundance] !=0, ] #removendo as linhas com zero da coluna "abundance".
    print("Foi removido linhas com valores de abundância igual a zero.") #para aparecer uma mensagem, caso tenha encontrado linhas com valores igual a zero e tenha removido.
    }
    
  if(any(x[, level.length] ==0)) #condição para remover as linhas com zero da coluna "length".("Se existir alguma linha da coluna de comprimento com valores iguais a zero")
    
    {  
    x=x[x[, level.length] !=0, ]#removendo as linhas com zero da coluna "length".
    print("Foi removido linhas com valores de comprimento igual a zero.") #para aparecer uma mensagem, caso tenha encontrado linhas com zero e tenha removido.
    }
  
  if(any(!x[, level.order] %in% c("copepoda", "cladocera"))) #condição para aceitar apenas se a coluna "order" tiver os gêneros "copepoda" e "cladocera". ("Se existir alguma linha da coluna de ordem sem a informação cladocera ou copepoda)
    
    {  
    stop("OPS...você não definiu os gêneros cladocera e/ou copepoda corretamente ou então não possui essa informação em sua planilha!") #caso o usuário não tenha definido os gêneros corretamente de todas as linhas do data.frame, a função não irá rodar e irá aparecer essa mensagem no console.
    }
  
  ps=vector() #criando um objeto para guardar os valores de peso seco.
  l=vector() #criando um objeto para guardar os valores de comprimento em milímetro.
  
  for(i in 1:nrow(x)) #aplicando o loop para que ele possa olhar linha por linha e fazer as operações matemáticas de acordo com a ordem. 
    
  {  
    if(x[i, level.order]=="cladocera") #condiçnao caso a linha da coluna "order" for "cladocera". 
      
      {
      lna=1.9526 #definindo o valor de "lna" para "cladocera"
      b=2.399 #definindo o valor de "b" para "cladocera"
      l[i]=x[i, level.length]*0.001 #calculando os valores de comprimento em milímetro para guardar no objeto "l".
      lnw=lna+b*log(l[i]) #caclculando lnw a partir dos valores de "lna", "b" e "l".
      ps[i]=exp(lnw) #calculando os valores de peso seco para guardar no objeto "ps".
      }
    
    if(x[i, level.order]=="copepoda") #condiçãao caso a linha da coluna "order" for "copepoda". 
      
      {
      lna=1.7512 #definindo o valor de "lna" para "copepoda"
      b=2.653 #definindo o valor de "b" para "cladocera"
      l[i]=x[i, level.length]*0.001 #criando os valores de comprimento em milímetro para guardar no objeto "l".
      lnw=lna+b*log(l[i])  #caclculando lnw a partir dos valores de "lna", "b" e "l".
      ps[i]=exp(lnw) #calculando os valores de peso seco para guardar no objeto "ps".
      }
  }
  
  sumario.l = summary(l) #fazendo um summary da variável comprimento (mm) e guardando esses valores no objeto chamado "sumario.l".
  
  sumario.ps = summary(ps) ##fazendo um summary da variável peso seco e guardando esses valores no objeto chamado "sumario.ps".
  
  body.mass = ps*x[, level.abundance] #calculando a biomassa a partir do valor de peso seco e guardando esses valores no objeto chamado "body.mass".
  
  sumario.body.mass = summary(body.mass) ##fazendo um summary da variável biomassa e guardando esses valores no objeto chamado "sumario.body.mass".
  
  graphic = 
    {
      par(mfrow=c(1, 2), bty="l") #alterando o layout do plot para mostrar os dois gráficos (plot da relação biomassa~comprimento por "order" e boxplot da biomassa de cladocera e copepoda). 
      plot(body.mass~l, pch=20, ylab="Biomassa", xlab="Comprimento(mm)") #fazendo um plot da biomassa e do comprimento (mm) por "order" e guardando esse plot no objeto chamado "graphic". 
      boxplot(body.mass~x[, level.order], col=c("orange", "purple"), ylab="Biomassa", xlab="Comprimento(mm)") #fazendo um boxplot da biomassa por "order" e guardando esse plot no objeto chamado "graphic". 
      par(mfrow=c(1,1)) #retornando a confirguração do layout.
    }
  
  resultado=list(l, sumario.l, ps, sumario.ps, body.mass, sumario.body.mass, graphic) #criando um objeto da natureza lista chamado "resultado" com os valores das variáveis comprimento, peso seco e biomassa, o summary dessas variáveis e o plot da relacão abundância~comprimento (mm). 
  
  names(resultado)=c("comprimento (mm)", "sumário do comprimento",  "peso seco", "sumário do peso seco", "biomassa", "sumário da biomassa", "plot") #nomeando cada objeto dentro do objeto resultado. 
  
  return(resultado) #retornando o resultado da função.
  
}
\end{lstlisting}



\textbf{\emph{Arquivo da função Zoobodymass}}

\href{media/bie5782/01_curso_atual/alunos/trabalho_final/lorena.biouni/zoobodymass.r}{zoobodymass.r}

\textbf{\emph{Help da função Zoobodymass}}\lstset{frame=single}
\begin{lstlisting}
 
Zoobodymass                                                     R Documentation

Cálcula a biomassa de microcrustáceos zooplanctîônicos

Description:

 A função gera dados de biomassa em µg.mL a partir de dados de entrada de abundância e tamanho corporal. A biomassa é calculada de acordo com as equeções de peso seco e comprimento de acordo com Bottrell et al. (1976) para cladocera e Copepoda. A função também gera um sumário das principais variáveis de interesse (comprimento em milímetros, peso seco e biomassa) e oferece a opção de gerar gráficos.

Usage:

Zoobodymass(x, level.abundance = "", level.length = "", level.order = "", graphic = TRUE)

Arguments:

 x: dataframe
   
 level.abundance: define o nome da coluna do dataframe que contém os valores de abundância
   
 level.length: define o nome da coluna do dataframe que contém os valores de comprimento
   
 level.order: define o nome da coluna que contém a ordem zooplanctônica (cladocera e/ou copepoda).
   
 graphic: é um argumento opcional para plotar um gráfico da relação entre a biomassa e o comprimento dos organismos e um boxplot da biomassa por "level.order"" ("cladocera", "copepoda"). 

Details:

- Os dados de entrada obrigatoriamente precisam estar na forma de data.frame. Caso o usuário entre com dados de outra natureza, a função ir´á acusar uma mensagem de erro e não irá rodar. 

- Dentro do argumento "level.order", o usuário terá que apresentar a informação da seguinte forma: para os cadóceros o nome da ordem é "cladocera" e para os copepodes o nome da ordem é "copepoda". Caso o usuário não fornecça essa inforação a funçã ir´á acusar uma mensagem de erro e não irá rodar. 

- A função oferece a opção de gerar dois gráficos: um plot da relação entre a biomassa (µg.mL) e do comprimento (mm) dos microcrustáceos e um boxplot da biomassa para cada ordem, cladocera e copepoda. 

Value:

 A função irá retornar um objeto com natureza de lista, com os seguintes componentes:

  comprimento: um vetor com os valores de tamanho corporal dos organismos em milímetros

  sumário do comprimento: um sumário dos valores de tamanho corporal dos organismos
  
  peso seco: um vetor com os valores de peso seco dos organismos em µg.mL
  
  sumário do peso seco: um sumário dos valores de peso seco dos organismos.
  
  biomassa: um vetor com os valores de biomassa dos organismos em µg.mL
  
  sumário da biomassa: um sumário dos valores de biomassa dos organismos
  
  plot: um plot da relação entre a biomassa e o tamanho corporal dos microcrustáceos e um boxplot da biomassa dos cladóceros e copepodes. 

Warning:

 As mensagens de erro que aparecem na função são:
  
  {Warning }{"OPS... o objeto não é um data.frame!"}
  
  {Warning }{"Foi removido linhas com NA."}
  
  {Warning }{"Foi removido linhas com valores de abundância igual a zero."}
  
  {Warning }{"Foi removido linhas com valores de comprimento igual a zero."}
  
  {Warning }{"OPS...você não definiu os gêneros cladocera e/ou copepoda corretamente ou então não possui essa informação em sua planilha!"}
  
Author(s):

 Lorena Pinheiro Silva

References:

 Blettler, M. C. M., Bonecker, C. C. Avaliação da biomassa de microcrustáceos em ambientes aquáticos continentais. Caracas: Interciencia. v. 21, n. 8, p. 591-597, 2006.
     
 Bottrell, H. H., Duncan, A., Gliwics, Z. M., Grygierek, E., Herzong, A., Hillbrincht-Ilkowska, A., Kurasawa, H., Larsson, P., Weglenska, T. A review of some problems in zooplankton production studies. Oslo: Nor. J. Zool. v. 24, p. 419-456, 1976.

Examples:

#Criando um vetor com os dados de abundância
abundance= c(0, 153256, 65280, 36960, 31664, 22772, 35456, 430, 0, 32404, 13589, 11196, 211152, 1169, 11814, 17344, 12596, 13080, 11908, 17696, 13180, 1043, 11237, 15180, 11960, 21720, 21712, 15576, 32080, 21664, 21632, 21376, 1543, 32186, 11543, 133357)

#Criando um vetor com os dados de comprimento
length= c(234, 133, 157, 149, 138, 230, 195, 409, 234, 233, 207, 201, 145, 433, 207, 249, 238, 230, 195, 209, 213, 546, 133, 233, 207, 249, 238, 230, 195, 164, 234, 123, 543, 134, 321, 133)

#Criando as cordones "cladocera" e "copepoda"
order= sort(rep(c("cladocera", "copepoda"), 18))

#Criando um data.frame com todas as variáveis
teste=data.frame(abundance, length, order)

# Aplicando a função
Zoobodymass(teste, level.abundance = "abundance", level.length = "length", level.order="order", graphic = TRUE)
\end{lstlisting}



\textbf{\emph{Arquivo do help da função Zoobodymass}}

\href{media/bie5782/01_curso_atual/alunos/trabalho_final/lorena.biouni/zoobodymass.txt}{zoobodymass.txt}

\end{document}
