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



\subsection{\texorpdfstring{Entrega da Proposta}{Entrega da Proposta}}
\label{sec:entrega_da_proposta}


\textbf{FUNÇÃO filoprop}

\textbf{
HELP da função filoprop} \href{media/bie5782/01_curso_atual/alunos/trabalho_final/lucas.ferreira.nascimento/helpp_taio.txt}{helpp\_taio.txt}

Obs: para rodar os exemplos baixe os seguintes arquivos

data.frame de input \href{media/bie5782/01_curso_atual/alunos/trabalho_final/lucas.ferreira.nascimento/data.limpo.espinhos.txt}{data.limpo.espinhos.txt}

filogenia de input 
\href{media/bie5782/01_curso_atual/alunos/trabalho_final/lucas.ferreira.nascimento/arecaceae_phylo.txt}{arecaceae\_phylo.txt}\lstset{frame=single, language=rsplus}
\begin{lstlisting}
 
filoprop{}                      Package: unknown                      R Documentation


Função prática para a representação da proporção relativa de um caráter ao 
longo de uma filogenia


Description:


filoprop realiza as seguintes tarefas: 1) calcula a proporção relativa de um 
caráter dentro de cada táxon de uma filogenia; 2) representa essa proporção 
relativa em um gráfico de setores; 3) plota cada gráfico de setores na ponta 
(tip) do seu respectivo táxon na árvore filogenética; 4) plota uma legenda; 5) 
salva a figura em um arquivo PDF no diretório de trabalho 

Usage:


filoprop(data, taxon, variavel, phylo, categ.cor, variavel.cont, n.categorias, circular=T, 
         nome.arquivo, x.y.legenda, unidade)
         

Arguments:


data           data.frame; dados do caráter de interesse e do táxon de interesse em vetores colunas.

taxon          character; vetor coluna de data com o táxon de interesse.

variavel       numeric, integer ou character; vetor coluna de data com o caráter de interesse.

phylo          multiPhylo; filogenia  a nível do táxon de interesse. 

categ.cor      character; vetor de tamanho 2 com o nome de cores. 

variavel.cont  logical; discrimina se o caráter de interesse é uma variável  contínua ou categórica. 

n.categorias   numeric; número de categorias desejadas se variavel.cont=T. 

circular       logical; informa se a figura desejada para a  filogenia é do tipo circular.

nome.arquivo   character; nome para o arquivo PDF que vai ser gerado.

x.y.legenda    numeric; vetor de tamanho 2 com as coordenadas da legenda.

unidade        character; unidade da variável de interesse. 
 
                   

Details:

   
A função filoprop representa cada categoria da variável de interesse em um  setor 
do gráfico de setores. A legenda, gerada automaticamente, informa a cor em que cada 
categoria é representada no gráfico de setores. Se a variável de interesse for 
contínua, a função filoprop  cria o número de categorias discriminado no argumento 
n.categorias. Para mais de duas categorias a filoprop escolhe cores entre as duas
cores fornecida no argumento categ.cor, formando um continuum.
   

Value:


Retorna um arquivo em PDF no diretório de trabalho com uma figura de uma árvore 
filogenética, um gráfico de setores em cada ponta dessa árvore e uma legenda. 


Warnings:


O nome do arquivo (argumento nome.arquivo) tem que ter extensão  PDF (.pdf).
A filogenia ter que estar a nível do táxon de interesse. 
A função filoprop exclui da filogenia fornecida os elementos que não são encontrados 
no argumento táxon.

Note:


Se a filogenia não estiver a nível do táxon fornecido a função filoprop envia 
a seguinte mensagem:
"Verifique: a filogenia contida no argumento *phylo* deve estar a nivel do objeto contido no argumento *taxon*"


Author(s):


Função desenvolvida por Lucas Ferreira do Nascimento (2017).
nascimento.flucas@gmail.com


References:


Comparative Methods in R - http://lukejharmon.github.io/ilhabela/
Phylogenetic tools for comparative Biology - http://blog.phytools.org/


See Also:

package: phytools. 
Esse pacote fornece várias ferramentas para métodos comparativos filogenéticos, 
assim como funções de manipulação, inferência e análises filogenéticas. 

Examples:

===== data.frame de input ====== 
data<-read.table("data.limpo.espinhos.txt",header=TRUE,sep="\t",
                 as.is=TRUE, fill=TRUE,skipNul=T)

===== filogenia de input ======

phylo<-read.nexus("arecaceae_phylo.txt")

### variavel continua; filogenia tipo circular

filoprop(data, taxon=data$genus, variavel=data$length,phylo, categ.cor=c("chartreuse4", "firebrick4"), 
         variavel.cont=T, n.categorias=10 , circular=T, nome.arquivo="length.pdf" ,x.y.legenda=c(1.6,1) ,
         unidade="cm" )



### variavel continua; filogenia tipo cladograma


filoprop(data, taxon=data$genus, variavel=data$diam, phylo, categ.cor=c("lawngreen", "magenta"), variavel.cont=T, 
         n.categorias=10 , circular=F, nome.arquivo="diam.pdf" ,x.y.legenda=c(16,1) ,unidade="cm" )
         
         
### variavel categorica; filogenia tipo circular


filoprop(data, taxon=data$genus, variavel=data$espinho, phylo, categ.cor=c("gold", "orangered3"), variavel.cont=F, 
         n.categorias= , circular=T, nome.arquivo="espinho.pdf" ,x.y.legenda=c(1.6,1) ,unidade="")
         


### variavel categorica; filogenia tipo cladograma


filoprop(data, taxon=data$genus, variavel=data$fr_type,phylo, categ.cor=c("aquamarine", "black"), variavel.cont=F, 
         n.categorias= , circular=F, nome.arquivo="fr_type.pdf" ,x.y.legenda=c(10,1) ,unidade= "")
\end{lstlisting}



==== código da função filoprop ==== \href{media/bie5782/01_curso_atual/alunos/trabalho_final/lucas.ferreira.nascimento/funça_o_taio.txt}{funca\_o\_taio.txt}\lstset{frame=single, language=rsplus}
\begin{lstlisting}


filoprop<- function(data,taxon,variavel, phylo, categ.cor, variavel.cont,n.categorias,circular=T,
                    nome.arquivo,x.y.legenda,unidade)
    
    
{
    #=================
    # P VARIÁVEIS CATEGÓRICAS E CONTÍNUAS
    #=================
    #carrega o pacote ape
    require(ape)
    require(RColorBrewer)
    #avisa aque carregou os pacotes
    cat("*pacote *ape* (Analyses of Phylogenetics and Evolution) carregado \n**pacote *RColorBrewer* (ColorBrewer palettes) carregado \n")
    #substitui as observacoes "" da variavel por NA
    variavel[variavel==""] <- NA 
    #cria um objeto com os taxons que n tem nos dados
    todrop <- phylo[[1]]$tip.label[-match(unique(taxon),phylo[[1]]$tip.label)]
    teste.todrop<-is.na(todrop)
    if (teste.todrop[1]==T)
    {
        stop("Verifique: a filogenia contida no argumento *phylo* deve estar a nivel do objeto contido no argumento *taxon*")
    }
    #cria um objeto com apenas os taxons presentes dos dados
    newphylo <- drop.tip(phylo[[1]],todrop)
    
 
    if(variavel.cont==T)  #P VARIAVEL CONTINUA
  
    {
        #muda o nome do objeto variavel
        variavel.cont<-variavel
        #calcula o valor maximo do objeto variavel.cont
        b.max<-max(variavel.cont,na.rm=T)
        #calcula o valor minimo do objeto variavel.cont
        b.min<-min(variavel.cont,na.rm=T)
        #soma 1 no argumento categorias p fazer uma sequencia com o numero de categorias desejada
        categorias=n.categorias+1
        #faz uma sequencia com o numero de categorias desejadas
        cut.breaks<-seq(b.min,b.max,length.out=categorias)
        cat("***intervalos usados p dividir as",n.categorias, "categorias:\n",cut.breaks,"\n")
        #usando a funcao cut, classifica cada observacao de acordo com as categorias
        variavel.categ<-cut(data$length,breaks=cut.breaks,labels=F)
        #retorna o nome do bjeto variavel.categ p variavel 
        variavel<-variavel.categ
        #tranforma o vetor da variavel em fator
        variavel<-as.factor(variavel)
        #contabiliza o numero de observacoes de cada categoria dentro de cada taxon e guarda num objeto matrix
        matriz.variavel <- aggregate(variavel,by=list(taxon),FUN=table)[,2]
        
        # DEFININDO O NOME DAS COLUNAS DE matriz.variavel P LEGENDA
        
        #adiciona a unidade nas categorias
        cut.breaks.unid = paste(cut.breaks, unidade, sep = "")
        #objeto cut.breaks.unid menos o primeiro elemento
        cut.breaks.unid.2 = cut.breaks.unid[2:length(cut.breaks.unid)]
        #com a funcao paste concatena os objetos cut.breaks.unid e cut.breaks.unid.2
        legenda.1 = paste(cut.breaks.unid, cut.breaks.unid.2, sep = " - ")
        #tira o ultimo elemento de legenda.1
        legenda.2<-legenda.1[1:length(cut.breaks.unid.2)]
        #objeto com o nome das colunas de matriz.variavel
        #as colunas de matriz.variavel sao as categorias criadas em cut.breaks.unid.2 
        #em que os dados pertencem
        categorias.usadas<-colnames(matriz.variavel)
        #converte categorias.usadas p numeric
        categorias.usadas<-as.numeric(categorias.usadas)
        #cria um objeto com a legenda final
        legenda.usada<-legenda.2[categorias.usadas]
        #cria um objeto com o numero de categorias usadas
        numero.categorias = length(legenda.usada)
        #cria um objeto com a categoria de cores desejada pelo usuaria (argumento categ.cor)
        colfunc = colorRampPalette(categ.cor)
        #dica de site p opcoes
        cat("****conferir site https://color.adobe.com/create/color-wheel/ p opcoes de cores \n*****dispositivo de tela fechado\n")
        #objeto com o numero de cores igual ao numero de categorias
        cores = colfunc(numero.categorias)
        #nomeia as colunas do matriz.variavel com o nome das cores
        #isso e p garantir que a legenda vai estar certa. determinada cor p determinada categoria
        colnames(matriz.variavel)<-cores
        #veja
        matriz.variavel
    }
    else #P VARIAVEL CATEGORICA
{
    #tranforma o vetor da variavel em fator
    variavel<-as.factor(variavel)
    #contabiliza o numero de observacoes de cada categoria dentro de cada taxon e 
    # guarda num objeto matrix
    matriz.variavel <- aggregate(variavel,by=list(taxon),FUN=table)[,2]
    
    # DEFININDO O NOME DAS COLUNAS DE matriz.variavel P LEGENDA
    
    #cria um obejto com o nome das categorias presentes nos dados
    categorias.usadas<-colnames(matriz.variavel)
    #cria um objeto p legenda
    legenda.usada<-categorias.usadas
    #cria um objeto com o numero de categorias
    numero.categorias = length(legenda.usada)
    #cria um objeto com a categoria de cores desejada pelo usuaria (argumento categ.cor)
    colfunc = colorRampPalette(categ.cor)
    #dica de site p opcoes 
    cat("****conferir site https://color.adobe.com/create/color-wheel/ p opcoes de cores \n*****dispositivo de tela fechado\n")
    #objeto com o numero de cores igual ao numero de categorias
    cores = colfunc(numero.categorias)
    #nomeia as colunas do matriz.variavel com o nome das cores
    #isso e p garantir que a legenda vai estar certa. determinada cor p determinada categoria
    colnames(matriz.variavel)<-cores
    #veja
    matriz.variavel
}
    #==================
    #P VARIÁVEIS CATEGÓRICAS E CONTÍNUAS
    #==================
    
    #coloca os valores da matriz variavel em proporcao
    matriz.variavel<- matriz.variavel/apply(matriz.variavel,1,sum)
    #substitui os NaN por 0
    matriz.variavel[is.nan(matriz.variavel)] <- 0
    #cria uma coluna de 1
    matriz.variavel <- cbind(matriz.variavel,rep(1,Ntip(newphylo)))
    #nomeia as linhas da matriz com os respectivos nomes dos taxons de interesse
    rownames(matriz.variavel) <- aggregate(variavel,by=list(taxon), FUN=table)[,1]
    #nomeia a coluna de Nas de "grey"
    colnames(matriz.variavel)[dim(matriz.variavel)[2]] <- "grey"
    #tranforma a matriz em data.frame
    df.variavel<-as.data.frame(matriz.variavel)
    #Coloca zero p todas as linhas da coluna grey menos aquelas em que a soma das linhas == 0. Assim
    #as linhas == 0 vao ficar com 1 na coluna grey
    df.variavel$grey[-which(apply(df.variavel[,1:3],1,sum)==0)] <- 0
    #converte df.variavel em matriz
    matriz.variavel<-as.matrix(df.variavel)
    #confira
    matriz.variavel
    #=============================
    #PLOTANDO AS FIGURAS
    #=============================
    
    #abre um dispositivo de tela
    quartz()
    
    if(circular==F)#se o argumento circular==T
    {
        #cria um arquivo pdf
        pdf(nome.arquivo, width=7, height=14)
        #plota a filogenia
        plot(newphylo,label.offset=4,cex=0.75)
        #plota a legenda criada
        legend(x.y.legenda,legend=legenda.usada,pch=21,pt.bg=cores,bty="n",cex=1)
        #plota uma legenda default p NAs 
        legend(c(6.5,1),legend=c("dados faltantes"),pch=21,pt.bg="grey",bty="n",cex=1)
        #adiciona os graficos categoricos
        tiplabels(pie=matriz.variavel[match(newphylo$tip.label,rownames(matriz.variavel)),]
                  ,piecol=colnames(matriz.variavel),cex=0.6)
    }
   
    else
    {
        #cria um arquivo pdf
        pdf(nome.arquivo, width=14, height=14)
        #plota a filogenia
        plot(newphylo,type='fan',label.offset=0.1,cex=1,no.margin=TRUE,x.lim=c(-1.6,1.6))
        #plota a legenda criada
        legend(x.y.legenda,legend=legenda.usada,pch=21,pt.bg=cores,bty="n",cex=1.5)
        #plota uma legenda default p NAs 
        legend(x.y.legenda+c(0.08,0),legend=c("dados faltantes"),pch=21,pt.bg="grey",bty="n",cex=1.5)
        #adiciona os graficos categoricos
        tiplabels(pie=matriz.variavel[match(newphylo$tip.label,rownames(matriz.variavel)),]
                  ,piecol=colnames(matriz.variavel),cex=0.6)
    }
    #numero e nome do dispositivo ativo
    dev.cur()
    #fecha o dispositivo ativo
    dev.off()
    
}

\end{lstlisting}



 8-)

\end{document}
