Índice
- O Curso R
-
- Tutoriais
-
- Apostila
-
- 6. Testes de Hipótese (em preparação!)
- Exercícios
-
- Material de Apoio
-
- Área dos Alunos
-
- Cursos Anteriores
-
IBUSP
Outras Insitutições
Linques
Visitantes
Outras Insitutições
Mestre em Botânica pela UEFS
Doutorando em Ecologia pela UESC
O título da minha Tese é “Diversidade vegetal em Floresta Atlântica no sul da Bahia: uma avaliação dos efeitos ambientais sobre a composição e estrutura da comunidade arbórea”. Desejo me aprofundar no uso do R e em um futuro próximo utilizar esta ferramenta em todas as análise de meu projeto.
Uma das tarefas árduas de quem trabalha com botânica é arrumar a lista de espécies, principalmente quando se trabalha em ambiente com alta diversidade e estas listas tendem a ser muito extensas. Um dos passos para organização da lista é colocar o nome do autor na espécie. Desta forma tenho interesse em criar uma função onde o objeto de entrada seria um data frame com a lista de espécies, podendo ser organizada uma espécie por linha na primeira coluna. Ou ainda, uma espécie por linha, mas na primeira coluna o nome do gênero e na segunda o epíteto específico correspondente. O objeto de saída seria um data frame composto pelo objeto original acrescido de uma coluna com o nome do autor da espécie. Aumentando a ambição da função, este objeto poderia ter ainda uma coluna com a distribuição geográfica da espécie. Estes dados seriam retirados da base de dados que consta no site da Lista de espécies da Flora do Brasil Flora do Brasil.
Como plano B sugiro uma função que possa calcular as distâncias geográficas entre determinadas coordenadas. O objeto de entrada seria uma matriz numérica com as latitudes na primeira coluna e a longitude na segunda coluna. As unidades das coordenas poderiam ser em UTM ou graus decimais. O objeto de saída seria uma matriz numérica com a distância, em Km ou em metros (escolhidas por um argumento) entre os pontos de entrada. Esta matriz de saída seria similar a matriz gerada pelo calculo de índices de similaridade.
Olá Diogo, As dua proposta são factíveis. A primeira vai necessitar que a sua função inclua a base de dados da Flora, mas acho que é possível. A segunda é interessante tb. e poderia ter diferentes possibilidade de entradas, por exemplo UTM ou graus. Deve só tomar cuidado no cálculo pois tem que levar em consideração que a conversão de graus para distância deve levar em consideração a forma da terra. Há diferentes formas de fazer a conversão, pegue uma e deixe claro isso na sua documentação.
floristic package: unknown R Documentation Busca os nomes dos autores de espécies de angiospermas --------------------- Descrição --------------------- Esta função lê uma lista de espécies de angiospermas e retorna a mesma lista de espécies acrescida dos nomes dos autores de cada uma. -------------- Uso -------------- floristic(lista,coluna=2, bd="brasil",csv=TRUE, familia=FALSE, grafico=FALSE) ----------------- Argumentos ----------------- lista uma matriz ou um data frame de caracteres ou fator contendo a lista de espécies. Cada espécie deve estar em uma linha da mesma coluna. coluna número da coluna que contém os nomes das espécies, o defalt é 2. bd banco de dados a ser utilizados para busca. O default é um banco com os nomes das espécies de angiospermas do Brasil. Os nomes aceitos são: "brasil" (todas as plantas do Brasil), "norte" (plantas que ocorrem na região Norte do Brasil) "nordeste" (plantas que ocorrem na região Nordeste do Brasil) "centro-oeste" (plantas que ocorrem na região Centro-Oeste do Brasil) "sudeste" (plantas que ocorrem na região Sudeste do Brasil) "sul" (plantas que ocorrem na região Sul do Brasil) csv se TRUE, a função cria um arquivo de extenção CSV no seu diretório de trabalho. Note que o default é FALSE. familia se consta em lista o nome das famílias de cada espécie, então este argumento deve ser TRUE. Os nomes das famílias devem estar na primeira coluna. O default é FALSE. grafico este argumento só terá efeito se familia for TRUE. Caso seja TRUE, retornará um gráfico com as 8 famílias de maior riqueza de espécies. -------------- Detalhes -------------- É recomendada a utilização do argumento familia=TRUE para que seja possível colocar o nome das famílias de cada espécie, bem como um gráfico diagnóstico que mostra as famílias com maior riqueza. Recomenda-se fortemente retirar os "cf." ou "aff." das espécies, pois pode impedir a busca correta da espécie no banco de dados. ----------- Valor ----------- O objeto de saída é um data frame com a primeira coluna contendo o nome das famílias, a segunda coluna contendo o nome das espécies e a terceira coluna contendo um "*" onde tiver uma espécie não encontrada no banco de dados. --------- Autor: --------- Rocha, Diogo S. B. diogosbr@gmail.com ----------------- Referências ----------------- Lista de Espécies da Flora do Brasil 2013 in http://floradobrasil.jbrj.gov.br ------------------ Veja também ------------------ ######### --------------- Exemplos --------------- teste=data.frame(Família=c("Fabaceae" , "Myrtaceae" , "Asteraceae" , "Rosaceae" , "Elaeocarpaceae" , "Meliaceae" , "Bignoniaceae" , "Melastomataceae", "Lauraceae" ,"Myrtaceae" , "Sapindaceae" , "Fabaceae" , "Polygonaceae" , "Melastomataceae" ,"Myrtaceae" , "Solanaceae" , "Myrtaceae", "Lauraceae" , "Myrtaceae" , "Annonaceae" ), Espécie= c("Copaifera trapaezifolia" , "Eugenia itapemirimensis" , "Vernonanthura diffusa" , "Prunus myrtifolia" , "Sloanea guianensis", "Cabralea canjerana" , "Handroanthus heptaphyllus" ,"Leandra melastomoides" , "Ocotea daphinifolia" , "Campomanesia dichotoma" , "Paullinia carpopoda" , "Fabaceae sp01 " , "Cocoloba mosenii" , "Miconia tristis", "Plinia sp01" , "Solanum rupincola" , "Myrceugenia pilotantha" , "Aniba sp02" , "Eugenia sp05" , "Guatteria pogonopus" ) ) result=floristic (teste, coluna=2 ) #usando o gráfico diagnóstico result=floristic (teste, familia=TRUE, grafico=TRUE )
########## ##Função## ########## floristic=function(lista,coluna=2,bd="brasil",csv=TRUE, familia=FALSE, grafico=FALSE) { if(coluna>dim(lista)[2]) ##caso seja digitado o número da coluna errado { stop("A coluna escolhida não existe") } if(sum(class(lista[,coluna])!=c("factor","character"))>=2) #Caso a coluna que contem espécies seja diferente de fator ou caractere gera aviso { stop("Esta coluna não possui nomes de espécies") } if(missing(lista)) { stop("Forneça uma lista de espécies") } ##lendo banco de dados selecionado if(bd=="brasil") { bdados=read.delim("http://dl.dropbox.com/s/xarlrvmwpujud12/BRASIL.txt",as.is=T) } if(bd=="nordeste") { bdados=read.delim("http://dl.dropbox.com/s/xw9hrkapgkiab2h/regiaoNORDESTE.txt",as.is=T) } if(bd=="norte") { bdados=read.delim("http://dl.dropbox.com/s/9cpt9zrbtsbva4z/regiaoNORTE.txt",as.is=T) } if(bd=="sudeste") { bdados=read.delim("http://dl.dropbox.com/s/mvemaqyn38r3f2t/regiaoSUDESTE.txt",as.is=T) } if(bd=="sul") { bdados=read.delim("http://dl.dropbox.com/s/w5i8xhwgyr5s8vu/regiaoSUL.txt", as.is=T) } if(bd=="centro-oeste") { bdados=read.delim("http://dl.dropbox.com/s/gkst0ca3josyp5o/regiaoCENTRO_OESTE.txt",as.is=T) } saida=matrix(ncol=3,nrow=dim(lista)[1]) ##objeto de saida #criando matriz vazia para salvar os dados saida=as.data.frame(saida) ##convertendo em um data frame colnames(saida)=c("Família","Espécies","Não encontradas") ##Nomes das colunas do arquivo de saída for(i in 1:dim(lista)[1]) { abc=agrep(lista[i,coluna],bdados[,1],ignore.case=T,value=T,max.distance = 0.01)#procurando espécie no banco de dados saida[i,2]=abc[1] #substituindo espécie sem autor por espécie com autor do BD } falta=sum(is.na(saida[,2])) #número de nomes faltantes encontrou=length(saida[,2])-sum(is.na(saida[,2])) #número de sp encontradas percentual=round(100-((sum(is.na(saida[,2]))/length(saida[,2]))*100),2)#porcentagem das encontradas saida[is.na(saida[,2]),3]="*" #coloca "*" na espécie que não foi encontrada saida[!is.na(saida[,2]),3]="" #coloca "" na espécie que foi encontrada saida[is.na(saida[,2]),2]=as.character(lista[is.na(saida[,2]),coluna]) #coloca os nomes fornecidos no lugar dos nomes faltantes if(familia==TRUE) { saida[is.na(saida[,1]),1]=as.character(lista[is.na(saida[,1]),1]) #coloca os nomes fornecidos no lugar dos nomes faltantes if(grafico==TRUE) { barplot(sort(table(lista[,1]),decreasing=T)[1:8],las=1,lwd=1.2, col=0,cex.axis=1.16,space=0.08,ylab="Número de espécies",cex.lab=1.15) ##plota as 8 famílias com mais espécies abline(h=0) #acrescenta o eixo X } if(coluna==1) { saida=saida[,2:3] } } else { saida=saida[,2:3] #caso não forneça o nome da família retira a coluna destinada aos nomes das famílias } if(csv==TRUE) { write.table(saida,file="Lista de espécies.csv",sep=";",row.name=F) ## salva uma planilha no diretório de trabalho cat("Número de espécies não encontradas:",falta,"\n","Número de espécies econtradas:",encontrou,"\n","Porcentagem dos encontrados:",percentual,"%","\n","\n","Foi salvo um arquivo .CSV no seu dirétório de trabalho","\n") } else { cat("Número de espécies não encontradas:",falta,"\n","Número de espécies econtradas:",encontrou,"\n","Porcentagem dos encontrados:",percentual,"%","\n","\n","Não foi salvo um arquivo .CSV no seu dirétório de trabalho","\n") } return(saida) }
Foram retirados do site da lista de espécies da Flora do Brasil os nomes das espécies que ocorrem no Brasil: