Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
03_apostila:programar_ale [2020/08/12 06:04] 127.0.0.1 edição externa |
03_apostila:programar_ale [2020/09/23 17:13] (atual) adalardo link |
||
---|---|---|---|
Linha 1: | Linha 1: | ||
<WRAP tabs> | <WRAP tabs> | ||
- | * [[bie5782:02_tutoriais:tutorial8:start|Tutorial]] | + | * [[02_tutoriais:tutorial8:start|Tutorial]] |
- | * [[bie5782:01_curso_atual:exercicios9| Exercícios]] | + | * [[01_curso_atual:exercicios9| Exercícios]] |
- | * [[bie5782:03_apostila:programar_ale| Apostila]] | + | * [[03_apostila:programar_ale| Apostila]] |
</WRAP> | </WRAP> | ||
====== 9. Noções de Programação ====== | ====== 9. Noções de Programação ====== | ||
Linha 20: | Linha 20: | ||
Vejamos um exemplo. | Vejamos um exemplo. | ||
- | <code> | + | <code rsplus> |
> zoo | > zoo | ||
onça anta tatu guará | onça anta tatu guará | ||
Linha 36: | Linha 36: | ||
Qualquer vetor sempre terá uma classe e um comprimento, mas o atributo '''names''' é opcional: | Qualquer vetor sempre terá uma classe e um comprimento, mas o atributo '''names''' é opcional: | ||
- | <code> | + | <code rsplus> |
> b | > b | ||
[1] 1 2 3 4 5 6 7 8 | [1] 1 2 3 4 5 6 7 8 | ||
Linha 49: | Linha 49: | ||
A função '''attributes''' nos mostra os atributos de um objeto, mas é de uso limitado no caso de vetores: | A função '''attributes''' nos mostra os atributos de um objeto, mas é de uso limitado no caso de vetores: | ||
- | <code> | + | <code rsplus> |
> zoo | > zoo | ||
onça anta tatu guará | onça anta tatu guará | ||
Linha 69: | Linha 69: | ||
As funções do R também são objetos, mas da classe '''function''': | As funções do R também são objetos, mas da classe '''function''': | ||
- | <code> | + | <code rsplus> |
> class( ls ) | > class( ls ) | ||
[1] "function" | [1] "function" | ||
Linha 80: | Linha 80: | ||
No caso das funções, podemos associar a elas os **argumentos** que elas necessitam para serem executadas: | No caso das funções, podemos associar a elas os **argumentos** que elas necessitam para serem executadas: | ||
- | <code> | + | <code rsplus> |
> args( ls ) | > args( ls ) | ||
function (name, pos = -1, envir = as.environment(pos), all.names = FALSE, | function (name, pos = -1, envir = as.environment(pos), all.names = FALSE, | ||
Linha 92: | Linha 92: | ||
Algumas funções matemáticas, no entanto, tem sempre apenas um argumento e são consideradas **funções primitivas**: | Algumas funções matemáticas, no entanto, tem sempre apenas um argumento e são consideradas **funções primitivas**: | ||
- | <code> | + | <code rsplus> |
> args( sin ) | > args( sin ) | ||
NULL | NULL | ||
Linha 116: | Linha 116: | ||
Um aspecto importante num ambiente orientado a objetos é que **tudo** o que o ambiente trabalha são objetos e o ambiente não pode trabalhar com nada que não seja um objeto conhecido. Inclui nessa categoria tudo aquilo que o R apresenta na tela, por isso toda saída do R pode ser guardada num objeto: | Um aspecto importante num ambiente orientado a objetos é que **tudo** o que o ambiente trabalha são objetos e o ambiente não pode trabalhar com nada que não seja um objeto conhecido. Inclui nessa categoria tudo aquilo que o R apresenta na tela, por isso toda saída do R pode ser guardada num objeto: | ||
- | <code> | + | <code rsplus> |
> length( zoo ) | > length( zoo ) | ||
[1] 4 | [1] 4 | ||
Linha 140: | Linha 140: | ||
Quando o R nos mostra, como resultado de uma operação, valores como '''NULL''' e '''integer(0)''' ele está dizendo que o resultado é **vazio**, isto é, não há resultado: | Quando o R nos mostra, como resultado de uma operação, valores como '''NULL''' e '''integer(0)''' ele está dizendo que o resultado é **vazio**, isto é, não há resultado: | ||
- | <code> | + | <code rsplus> |
> b | > b | ||
[1] 1 2 3 4 5 6 7 8 | [1] 1 2 3 4 5 6 7 8 | ||
Linha 151: | Linha 151: | ||
Veja que o valor '''NULL''' é um valor válidos que podem ser utilizados. | Veja que o valor '''NULL''' é um valor válidos que podem ser utilizados. | ||
- | <code> | + | <code rsplus> |
> zoo2 = zoo | > zoo2 = zoo | ||
> zoo2 | > zoo2 | ||
Linha 178: | Linha 178: | ||
Para obter a freqüência das espécies podemos usar a função '''table''': | Para obter a freqüência das espécies podemos usar a função '''table''': | ||
- | <code> | + | <code rsplus> |
> table( sp ) | > table( sp ) | ||
sp | sp | ||
Linha 221: | Linha 221: | ||
A estrutura básica de uma função é: | A estrutura básica de uma função é: | ||
- | <code> | + | <code rsplus> |
> minha.funcao <- function( argumento1, argumento2, argumento3, . . .) | > minha.funcao <- function( argumento1, argumento2, argumento3, . . .) | ||
Linha 245: | Linha 245: | ||
Vejamos alguns exemplos simples: | Vejamos alguns exemplos simples: | ||
- | <code> | + | <code rsplus> |
##criar um vetor de dados com 20 valores aleatórios de uma distribuição Poisson | ##criar um vetor de dados com 20 valores aleatórios de uma distribuição Poisson | ||
Linha 373: | Linha 373: | ||
* **Índice de Morisita**: | * **Índice de Morisita**: | ||
- | {{:bie5782:03_apostila:indice_morisita.jpg|}} | + | {{:03_apostila:indice_morisita.jpg|}} |
onde: | onde: | ||
Linha 393: | Linha 393: | ||
* utilizando o **nome** dos argumentos **em qualquer ordem**; | * utilizando o **nome** dos argumentos **em qualquer ordem**; | ||
* utilizando a **ordem** dos argumentos, mas **omitindo** os nomes. | * utilizando a **ordem** dos argumentos, mas **omitindo** os nomes. | ||
- | <code> | + | <code rsplus> |
> plot( col="red", pch=2, y=egr$ht, x=egr$dap ) | > plot( col="red", pch=2, y=egr$ht, x=egr$dap ) | ||
> plot( egr$dap, egr$ht ) | > plot( egr$dap, egr$ht ) | ||
Linha 400: | Linha 400: | ||
Para qualquer argumento podemos definir um **valor default** apresentando esse valor junto com argumento na definição da função: | Para qualquer argumento podemos definir um **valor default** apresentando esse valor junto com argumento na definição da função: | ||
- | <code> | + | <code rsplus> |
> myplot <- function(..., col="red") { plot(..., col="red") } | > myplot <- function(..., col="red") { plot(..., col="red") } | ||
> myplot( cax$dap, cax$h ) | > myplot( cax$dap, cax$h ) | ||
Linha 423: | Linha 423: | ||
Para saber qual é o editor padrão do R use o comando: | Para saber qual é o editor padrão do R use o comando: | ||
- | <code> | + | <code rsplus> |
> getOption("editor") | > getOption("editor") | ||
[1] "vi" | [1] "vi" | ||
Linha 430: | Linha 430: | ||
Para alterar o editor padrâo use o comando: | Para alterar o editor padrâo use o comando: | ||
- | <code> | + | <code rsplus> |
> options( editor= "gedit" ) # Faz o editor "gedit" ser o editor padrão do R | > options( editor= "gedit" ) # Faz o editor "gedit" ser o editor padrão do R | ||
</code> | </code> | ||
Linha 436: | Linha 436: | ||
No caso de editar sua função num editor externo ao R (p.ex., no arquivo '''minhas-funcoes.R'''), você traz o código para dentro do R utilizando o comando **"source"**: | No caso de editar sua função num editor externo ao R (p.ex., no arquivo '''minhas-funcoes.R'''), você traz o código para dentro do R utilizando o comando **"source"**: | ||
- | <code> | + | <code rsplus> |
> source( "minhas-funcoes.R" ) | > source( "minhas-funcoes.R" ) | ||
</code> | </code> | ||
Linha 472: | Linha 472: | ||
A estrutura de loop no R é: | A estrutura de loop no R é: | ||
- | <code> | + | <code rsplus> |
for( "variável" in "vetor de valores") | for( "variável" in "vetor de valores") | ||
{ | { | ||
Linha 486: | Linha 486: | ||
Vejamos um exemplo: //Convergência da distribuição t de Student para distribuição Normal Padronizada//: | Vejamos um exemplo: //Convergência da distribuição t de Student para distribuição Normal Padronizada//: | ||
- | <code> | + | <code rsplus> |
> # | > # | ||
> # Convergência da distribuição t de Student para distribuição Normal Padronizada | > # Convergência da distribuição t de Student para distribuição Normal Padronizada | ||
Linha 517: | Linha 517: | ||
Considere o problema o seguinte problema: temos a localização espacial de plantas num plano cartesiano com coordenadas **(x,y)**. Por exemplo: | Considere o problema o seguinte problema: temos a localização espacial de plantas num plano cartesiano com coordenadas **(x,y)**. Por exemplo: | ||
- | <code> | + | <code rsplus> |
> x = runif(100) | > x = runif(100) | ||
> y = runif(100) | > y = runif(100) | ||
Linha 524: | Linha 524: | ||
O objetivo é obter as **distâncias** entre as plantas duas-a-duas. Primeiro consideremos uma solução através de loop: | O objetivo é obter as **distâncias** entre as plantas duas-a-duas. Primeiro consideremos uma solução através de loop: | ||
- | <code> | + | <code rsplus> |
inter.edist = function(x, y) | inter.edist = function(x, y) | ||
{ | { | ||
Linha 541: | Linha 541: | ||
Consideremos agora uma solução vetorial: | Consideremos agora uma solução vetorial: | ||
- | <code> | + | <code rsplus> |
inter.edist.v = function(x, y) | inter.edist.v = function(x, y) | ||
{ | { | ||
Linha 553: | Linha 553: | ||
Qual dessas soluções é mais eficiente em termos do uso do tempo? | Qual dessas soluções é mais eficiente em termos do uso do tempo? | ||
- | <code> | + | <code rsplus> |
> x = runif(100) | > x = runif(100) | ||
> y = runif(100) | > y = runif(100) | ||
Linha 582: | Linha 582: | ||
<box 80% red> | <box 80% red> | ||
- | <code> | + | <code rsplus> |
================================================================= | ================================================================= | ||
OPERADOR DESCRIÇÃO PRIORIDADE | OPERADOR DESCRIÇÃO PRIORIDADE |