LUDMILA MARIA RATTIS TEIXEIRA Exercícios 9 - Construção de Funções Simples Exercício Programar 1.: QUE FRIO! 1-)Construa uma função que calcula automaticamente o valor de graus Celsius, sabendo-se a temperatura em Fahrenheit. C° = 5/9 * (F°- 32) ##Programar 1 nome.da.função = function(x) ## em que x é a temperatura em graus Fahrenheit { res = 5/9*(x-32) cat("Resultado =",res,"°C") } ##Testando a função nome.da.função(236) > nome.da.função(236) Resultado = 113.3333 °C> Exercício Programar 2. : Análise exploratória simultânea de duas variáveis 2-)Crie uma função para saída gráfica de análises exploratórias de duas variáveis. Essa saída pode ter por exemplo boxplot, histograma, qnorm e y por x. A função deve permitir a entrada de dois objetos vetores de mesmo tamanho (x e y). Caso os valores de x e y forem desenhados em um mesmo gráfico, defina cores diferentes. As legendas devem ser em português e a saída (return) deve apresentar o sumário das duas variáveis e o coeficiente de correlação. DICAS: Para histogramas com variáveis em um mesmo gráfico pode ser utilizada a função multhist() do pacote “plotrix”. Baixe e instale o pacote e veja o help da função Utilize o código do eda.shape, apresentado em aula como ponto de partida. Lembre-se que em algumas funções gráficas o argumento add=TRUE, adiciona elementos no gráfico no anterior. ##Programar 2 nome.função = function(x,y,name=c(a,b)) { par(mfrow=c(2,2)) par(bty="l") plot(y~x,main=paste(name[2],"x",name[1])) abline(lm(y~x),col=2) hist(x,col=2,main=paste("x",name[1]),ylab="Frequencia") hist(y,col=3,main=paste("y",name[2]),ylab="Frequencia") boxplot(y~x,main="Boxplot",names=nome) summary.x=summary(x) summary.y=summary(y) modelo=summary(lm(x~y)) res=list(summary.x,summary.y,modelo) names(res)=c(name[1],name[2],"correlação") return(res) } init.h=c(600,700,800,950,1100,1300,1500) h.d.=c(253,337,395,451,495,534,573) head(iris) nome.função(iris$Sepal.Length,iris$Sepal.Width,c(iris$Sepal.Length,iris$Sepal.Width)) #######desespero...aaaaaaaaaaaaaaah! library(plotrix) nome.função = function(x,y,name=c(a,b)) { par(mfrow=c(2,2)) par(bty="l") par(adj=1) plot(y~x,main=paste(name[2],"x",name[1])) abline(lm(y~x),col=2) par(adj=1) multhist(list(x,y), main='Histograma', xlab="x",ylab="Frequencia", col=c(2,3)) boxplot(y~x,main="Boxplot",col="lightgray") summary.x=summary(x) summary.y=summary(y) modelo=summary(lm(x~y)) res=list(summary.x,summary.y,modelo) names(res)=c(name[1],name[2],"correlação") return(res) } ####Testando head(iris) str(iris) table(iris$Sepal.Length) table(iris$Sepal.Width) length(iris$Sepal.Length) length(iris$Sepal.Width) nome.função(iris$Sepal.Length,iris$Sepal.Width,c(iris$Sepal.Length,iris$Sepal.Width)) ?boxplot ##Definitivamente, não deu certo por o nome das coordenadas no boxplot... Programar 3: Índices de Diversidade de Espécies Construa funções para computar os seguintes índices de diversidade de espécies: * Índice de Shannon: H = - sum(pi * ln(pi)) • Índice de Simpson: D = sum(pi^2) onde pi é a proporção da espécie i em relação ao número total de indivíduos na amostra (ni/N) Considere que o objeto de entrada na função será uma matriz com a abundância das espécies nas linhas e parcelas amostradas nas colunas. Considere a possibilidade de haver NA nessa matrix e que esse será removido automaticamente. indices=function(x) { pi=x[,2:ncol(x)] / apply(x[,2:ncol(x)],FUN=sum,MARGIN=2,na.rm=T) H=-apply(pi*log(pi,base=exp(1)),FUN=sum,MARGIN=2,na.rm=T) D=apply(pi^2,FUN=sum,MARGIN=2,na.rm=T) tabela=data.frame(H,D) return(tabela) } parcela.1=abs(round(rnorm(15,4,3))) parcela.2=abs(round(rnorm(15,3,4))) parcela.3=abs(round(rnorm(15,6,3))) parcela.4=abs(round(rnorm(15,4.3,2.1))) parcela.5=abs(round(rnorm(15,7.6,3.7))) nesp=rep("especie",75) lista=data.frame(nesp,parcela.1,parcela.2,parcela.3,parcela.4,parcela.5) lista indices(lista) ##Rodooooooooooooooooooooooooou!!! ##Testando: ## Shannon na unha: lista.2=indices(lista) - sum(pi * ln(pi)) pi=lista[,2:6] / apply(lista[,2:6],FUN=sum,MARGIN=2,na.rm=T) pi H=-apply(pi*log(pi,base=exp(1)),FUN=sum,MARGIN=2,na.rm=T) H D=apply(pi^2,FUN=sum,MARGIN=2,na.rm=T) D par(mfrow=c(1,1),adj=0.5) plot(lista.2$H~lista.2$D) modelo.2=lm(lista.2$H~lista.2$D) abline(lm(lista.2$H~lista.2$D),col="pink")