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 [2022/06/26 13:50] adalardo [FAZENDO VERSÕES PIORADAS DE FUNÇÕES EXISTENTES!!!!] |
02_tutoriais:tutorial8:start [2024/09/13 16:05] (atual) |
||
---|---|---|---|
Linha 43: | Linha 43: | ||
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. | 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: | No nosso caso: | ||
+ | |||
<WRAP center round box 60%> | <WRAP center round box 60%> | ||
- | **Pseudocodigo ''media'' | + | **Pseudocodigo ''media'' ** |
- recebe um vetor ''x'' | - recebe um vetor ''x'' | ||
- soma os valores do vetor no objeto ''soma'' | - soma os valores do vetor no objeto ''soma'' | ||
- guarda o tamanho do vetor ''x'' em ''nobs'' | - guarda o tamanho do vetor ''x'' em ''nobs'' | ||
- divide ''soma'' por ''nobs'' e guarda no objeto ''media'' | - divide ''soma'' por ''nobs'' e guarda no objeto ''media'' | ||
- | - retorna o objeto ''med'' | + | - retorna o objeto ''media'' |
</WRAP> | </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 para construir a função, como abaixo: | + | 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: |
- | |||
- | Uma funções muito simples | ||
<code rsplus> | <code rsplus> | ||
Linha 64: | Linha 63: | ||
soma <- sum(x) | soma <- sum(x) | ||
nobs <- length(x) | nobs <- length(x) | ||
- | med <- soma/nobs | + | media <- soma/nobs |
- | return(med) | + | return(media) |
} | } | ||
</code> | </code> | ||
Linha 76: | 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 101: | Linha 104: | ||
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''. | 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'' e imprima na tela uma mensagem sobre o número de ''NA'' 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''. 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 ''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 282: | 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 | ||