===== Entrega da Proposta ===== **FUNÇÃO filoprop** ** HELP da função filoprop** {{:01_curso_atual:alunos:trabalho_final:lucas.ferreira.nascimento:helpp_taio.txt|}} Obs: para rodar os exemplos baixe os seguintes arquivos data.frame de input {{:01_curso_atual:alunos:trabalho_final:lucas.ferreira.nascimento:data.limpo.espinhos.txt|}} filogenia de input {{:01_curso_atual:alunos:trabalho_final:lucas.ferreira.nascimento:arecaceae_phylo.txt|}} 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= "") ==== código da função filoprop ==== {{:01_curso_atual:alunos:trabalho_final:lucas.ferreira.nascimento:funça_o_taio.txt|}} 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() } 8-)