Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
02_tutoriais:tutorial8:start [2021/12/22 17:26] adalardo |
02_tutoriais:tutorial8:start [2024/09/13 16:05] (atual) |
||
---|---|---|---|
Linha 4: | Linha 4: | ||
* [[03_apostila:programar_ale| Apostila]] | * [[03_apostila:programar_ale| Apostila]] | ||
</WRAP> | </WRAP> | ||
- | ====== 9. Tutoriais de Programação ====== | + | ====== 9. Criando Funções Básicas ====== |
Linha 32: | Linha 32: | ||
{{ :02_tutoriais:pink.jpg?200 | }} | {{ :02_tutoriais:pink.jpg?200 | }} | ||
+ | |||
+ | ===== Classe Function ===== | ||
+ | |||
+ | Um objeto de função é uma classe especial de objetos no R que encapsulam algum tarefa. A função ''function()'' recebe algumas informações através dos seus argumentos e usa essas informações internamente para a realização do procedimento desejado. O procedimento ou tarefa realizada por uma função é conduzido por um algoritmo, que nada mais é que um sequência de comandos concatenados. Quando o objeto de função é chamado, ele retorna o que os outros objetos retornam no console do R, o que foi atribuído a ele, ou seja essas linhas de comando no formato de texto. Entretanto, quando o objeto da classe ''function'' é chamada com os parênteses ''( )'' ele realiza a tarefa conduzido pelo conjunto concatenados de comandos que foram atribuídos a ele. Ao final, normalmente, a função retorna um **único** objeto que contém o resultado do procedimento. Para o retorno deste objeto, normalmente usamos uma outra função chamada ''return()''. | ||
===== FAZENDO VERSÕES PIORADAS DE FUNÇÕES EXISTENTES!!!! ===== | ===== FAZENDO VERSÕES PIORADAS DE FUNÇÕES EXISTENTES!!!! ===== | ||
- | Uma funções muito simples | + | Vamos construir algumas funções simples. A primeira é uma função que calcula a média de um conjunto de valores. |
+ | A primeira etapa é definir qual o tipo de objetos que a função irá manipular e designar um nome a esse objeto como um argumento. No caso da média podemos definir esse objeto como um vetor numérico ''x''. Em seguida precisamos definir o algoritmo que será executado. Uma forma de fazer isso é através de um pseudocódigo que é a descrição literal do algoritmo. | ||
+ | No nosso caso: | ||
+ | |||
+ | <WRAP center round box 60%> | ||
+ | **Pseudocodigo ''media'' ** | ||
+ | - recebe um vetor ''x'' | ||
+ | - soma os valores do vetor no objeto ''soma'' | ||
+ | - guarda o tamanho do vetor ''x'' em ''nobs'' | ||
+ | - divide ''soma'' por ''nobs'' e guarda no objeto ''media'' | ||
+ | - retorna o objeto ''media'' | ||
+ | </WRAP> | ||
+ | |||
+ | |||
+ | |||
+ | Depois de definir o que a função conterá, precisamos abrir um bloco de código para conter as linhas de comando que definem o algoritmo com as chaves ''{ }''. Em seguida colocamos as linhas de comando descritas no pseudocodigo e rodamos todo o bloco de código desde a atribuição da função a um nome para construir um objeto da classe ''function'' na nossa área de trabalho. Rode o código abaixo e cheque se houve a construção do objeto ''media'' e qual a classe desse objeto: | ||
<code rsplus> | <code rsplus> | ||
Linha 49: | Linha 69: | ||
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
- | Note que a função nada mais é do que um conjunto de linhas de comando concatenadas para executar uma tarefa. A principio quem conhece as funções básicas do R já está qualificado a fazer funções mais complexas. | + | Note que a função nada mais é do que um conjunto de linhas de comando concatenadas para executar uma tarefa. A princípio quem usa as funções básicas do R já está qualificado a fazer funções mais complexas a partir delas. |
</WRAP> | </WRAP> | ||
Linha 55: | Linha 75: | ||
===== Testando a função ===== | ===== Testando a função ===== | ||
+ | Para testar a função que acabamos de fazer, utilizamos ela da mesma maneira que as outras funções que usamos até agora. Com a diferença que esta não tem a documentação que as funções de pacotes precisam ter para poderem ser disponibilizadas no repositório do R. Rode os códigos abaixo para ver a sua função em atividade: | ||
+ | |||
<code rsplus> | <code rsplus> | ||
ls() | ls() | ||
+ | class(media) | ||
media | media | ||
media() | media() | ||
+ | help(media) | ||
dados <- rnorm(20, 2, 1) | dados <- rnorm(20, 2, 1) | ||
media(dados) | media(dados) | ||
Linha 78: | Linha 102: | ||
===== Uma função mais elaborada ===== | ===== Uma função mais elaborada ===== | ||
- | A funcão padrão do R (//mean()//) não calcula a média quando há //NA//'s no vetor de dados, a menos que o usuário utilize o argumento //na.rm=TRUE//. | + | A função padrão do R (''mean()'') não calcula a média quando há ''NA'' no vetor de dados, a menos que o usuário utilize o argumento ''na.rm = TRUE''. |
- | Vamos construir uma função que diferente da função padrão, calcule a média na presença de //NA//'s, entretanto lance na tela uma mensagem sobre o número de //NA//'s removidos do cálculo. | + | Vamos construir uma função que diferente da função padrão, calcule a média na presença de ''NA'' e imprima na tela uma mensagem sobre o número de ''NA'' removidos do cálculo. |
- | Note que é uma função com dois argumentos, que permite ao usuário tomar a decisão de remover ou não //NA//'s. Diferente da função //mean()// o padrão é invertido, nossa função remove //NA//'s se nenhum argumento for mencionado. Note que vamos sobrepor o objeto anterior da classe //função//, chamado **media**. | + | Note que é uma função com dois argumentos, que permite ao usuário tomar a decisão de remover ou não ''NA''. Diferente da função ''mean()'' o padrão é invertido, nossa função remove ''NA'' se nenhum argumento for mencionado. Note que vamos sobrepor o objeto anterior da classe ''function'', chamado **media**. |
Linha 190: | Linha 214: | ||
<WRAP center round tip 80%> | <WRAP center round tip 80%> | ||
Quando o valor é próximo a 1 a distribuição é considerada aleatória. Isto quer dizer que que a ocorrência de cada indivíduo na parcela é indendente da ocorrência das demais. Neste caso, o número de indivíduos por parcela é descrito por uma variável Poisson, que tem exatamente a média igual à variância. | Quando o valor é próximo a 1 a distribuição é considerada aleatória. Isto quer dizer que que a ocorrência de cada indivíduo na parcela é indendente da ocorrência das demais. Neste caso, o número de indivíduos por parcela é descrito por uma variável Poisson, que tem exatamente a média igual à variância. | ||
- | Podemos então fazer um teste de significância simulando uma distribuição Poisson com a mesma média dos dados. | + | Podemos então fazer um teste de hipótese simulando uma distribuição Poisson com a mesma média dos dados. |
</WRAP> | </WRAP> | ||
- | ===== Função para criar o teste de signficância do ID ===== | + | ===== Função para criar o teste de hipótese do ID ===== |
Linha 261: | Linha 285: | ||
sum(dados.pois20) ## a somatória aqui sempre dará 131, somente porque a semente é a mesma | sum(dados.pois20) ## a somatória aqui sempre dará 131, somente porque a semente é a mesma | ||
set.seed(22) | set.seed(22) | ||
- | dados.norm20<-rnorm(20,mean=6, sd=2) ## sorteia 20 dados de uma função normal com média 6 e dp = 1 | + | dados.norm20<-rnorm(20,mean=6, sd=2) ## sorteia 20 dados de uma função normal com média 6 e dp = 2 |
sum (dados.norm20) ### aqui o resultado dará sempre 130.48 | sum (dados.norm20) ### aqui o resultado dará sempre 130.48 | ||