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 | ||
03_apostila:03-funcoes [2020/08/16 12:51] adalardo [Soluções dos Exercícios] |
03_apostila:03-funcoes [2023/08/14 16:23] 127.0.0.1 edição externa |
||
---|---|---|---|
Linha 12: | Linha 12: | ||
==== Operações Aritméticas Básicas ==== | ==== Operações Aritméticas Básicas ==== | ||
- | A linha de comando do R funciona como uma calculadora. Todas operações aritméticas | + | A linha de comando do R funciona como uma calculadora. As principais operações aritméticas |
- | e funções matemáticas principais estão disponíveis. Exemplo: | + | e funções matemáticas estão disponíveis. Exemplo: |
- | <code> | + | <code rsplus> |
> 4 + 9 | > 4 + 9 | ||
[1] 13 | [1] 13 | ||
Linha 31: | Linha 31: | ||
A notação básica de operações algébricas, como a aplicação hierárquica de parênteses, | A notação básica de operações algébricas, como a aplicação hierárquica de parênteses, | ||
também pode ser utilizada: | também pode ser utilizada: | ||
- | <code> | + | <code rsplus> |
> (4 + 5 ) * 7 - (36/18)^3 | > (4 + 5 ) * 7 - (36/18)^3 | ||
[1] 55 | [1] 55 | ||
Linha 39: | Linha 39: | ||
</code> | </code> | ||
- | Note que somente os parênteses podem ser utilizados nas expressões matemáticas. As chaves ("{}") e os colchetes ("[]") têm outras funções no R: | + | Note que somente os parênteses podem ser utilizados nas expressões matemáticas. As chaves ("{}") e os colchetes ("[]") têm outras funções no R: |
- | <code> | + | <code rsplus> |
> (2 * { 2 * [ 2 * (3-4)]}) | > (2 * { 2 * [ 2 * (3-4)]}) | ||
Error: syntax error in "(2 * { 2 * [" | Error: syntax error in "(2 * { 2 * [" | ||
Linha 46: | Linha 46: | ||
</code> | </code> | ||
- | Por que o R é uma calculadora **fora do comum** ? Experimente fazer a seguinte operação matemática na sua calculadora: | + | Por que o R é uma calculadora **fora do comum** ? Experimente fazer a seguinte operação matemática na sua calculadora: |
- | <code> | + | <code rsplus> |
> 1 - (1 + 10^(-15)) | > 1 - (1 + 10^(-15)) | ||
</code> | </code> | ||
Linha 55: | Linha 55: | ||
As funções matemáticas comuns também estão disponíveis e podem ser aplicadas diretamente na linha de comando: | As funções matemáticas comuns também estão disponíveis e podem ser aplicadas diretamente na linha de comando: | ||
- | <code> | + | <code rsplus> |
> sqrt(9) # Raiz Quadrada | > sqrt(9) # Raiz Quadrada | ||
[1] 3 | [1] 3 | ||
Linha 76: | Linha 76: | ||
As funções trigonométricas: | As funções trigonométricas: | ||
- | <code> | + | <code rsplus> |
> sin(0.5*pi) # Seno | > sin(0.5*pi) # Seno | ||
[1] 1 | [1] 1 | ||
- | > cos(2*pi) # Coseno | + | > cos(2*pi) # Cosseno |
[1] 1 | [1] 1 | ||
> tan(pi) # Tangente | > tan(pi) # Tangente | ||
Linha 89: | Linha 89: | ||
[1] 90 | [1] 90 | ||
> | > | ||
- | > acos(0) # Arco coseno (em radianos) | + | > acos(0) # Arco cosseno (em radianos) |
[1] 1.570796 | [1] 1.570796 | ||
> acos(0) / pi * 180 | > acos(0) / pi * 180 | ||
Linha 101: | Linha 101: | ||
Funções para arredondamento: | Funções para arredondamento: | ||
- | <code> | + | <code rsplus> |
> ceiling( 4.3478 ) | > ceiling( 4.3478 ) | ||
[1] 5 | [1] 5 | ||
Linha 117: | Linha 117: | ||
Funções matemáticas de especial interesse estatístico: | Funções matemáticas de especial interesse estatístico: | ||
- | <code> | + | <code rsplus> |
> factorial( 4 ) # Fatorial de 4 | > factorial( 4 ) # Fatorial de 4 | ||
[1] 24 | [1] 24 | ||
> choose(10, 3) # Coeficientes binomiais: combinação de 10 3-a-3 | > choose(10, 3) # Coeficientes binomiais: combinação de 10 3-a-3 | ||
[1] 120 | [1] 120 | ||
+ | > gamma(1.2) # Função gamma | ||
+ | [1] 0.9181687 | ||
> | > | ||
</code> | </code> | ||
Linha 132: | Linha 134: | ||
Para definir uma variável, basta escolher um nome (//lembre-se das regras de nomes no R//) e atribuir a ela um valor: | Para definir uma variável, basta escolher um nome (//lembre-se das regras de nomes no R//) e atribuir a ela um valor: | ||
- | <code> | + | <code rsplus> |
- | > | + | |
> a = 3.6 | > a = 3.6 | ||
> b = sqrt( 35 ) | > b = sqrt( 35 ) | ||
Linha 152: | Linha 154: | ||
> | > | ||
> a - b * c / d | > a - b * c / d | ||
- | Error: object "d" not found | + | Error: object "d" not found |
- | > | + | |
</code> | </code> | ||
Linha 192: | Linha 193: | ||
Se o diâmetro à altura do peito (DAP) de uma árvore for 13.5cm, qual | Se o diâmetro à altura do peito (DAP) de uma árvore for 13.5cm, qual | ||
a área transversal? | a área transversal? | ||
- | |||
- | Se uma árvore possui três fustes com DAPs de: 7cm, 9cm e 12cm, qual | ||
- | a sua área transversal? | ||
</box> | </box> | ||
Linha 202: | Linha 200: | ||
Se uma árvore possui três fustes com DAPs de: 7cm, 9cm e 12cm, qual | Se uma árvore possui três fustes com DAPs de: 7cm, 9cm e 12cm, qual | ||
- | o diâmetro (único) que é equivalente à sua área transversal? | + | a sua área transversal de cada fuste? |
</box> | </box> | ||
Linha 210: | Linha 208: | ||
O modelo alométrico de biomassa ajustado para árvores do Cerradão | O modelo alométrico de biomassa ajustado para árvores do Cerradão | ||
- | estabele que a biomassa é dada pela expressão: | + | estabelece que a biomassa é dada pela expressão: |
$$\hat{b} = e^{-1,7953} d^{2.2974}$$ | $$\hat{b} = e^{-1,7953} d^{2.2974}$$ | ||
Linha 253: | Linha 251: | ||
> sqrt(Inf) | > sqrt(Inf) | ||
[1] Inf | [1] Inf | ||
- | > sqrt( - 1 ) | + | > sqrt(-1) |
[1] NaN | [1] NaN | ||
Warning message: | Warning message: | ||
Linha 265: | Linha 263: | ||
> NaN / -1 | > NaN / -1 | ||
[1] NaN | [1] NaN | ||
- | > | + | |
Note que determinadas **palavras** (além do nome das funções) estão reservadas no R, pois são utilizadas com significado especial: | Note que determinadas **palavras** (além do nome das funções) estão reservadas no R, pois são utilizadas com significado especial: | ||
- | * ''pi'' - constante < pi = 3.141593 ; | + | * ''pi'' - constante pi = 3.141593 ; |
* ''Inf'' - infinito; | * ''Inf'' - infinito; | ||
* ''NaN'' - indeterminado (Not a Number), normalmente resultado de uma operação matemática indeterminada; | * ''NaN'' - indeterminado (Not a Number), normalmente resultado de uma operação matemática indeterminada; | ||
- | * ''NA'' - indeterminado (Not Available), normalmente caracterizando uma observação perdida (//missing value//). | + | * ''NA'' - indeterminado (Not Available), normalmente caracterizando uma observação perdida ou faltante (//missing value//). |
Na operações matemáticas, ''NaN'' e ''NA'' atuam sempre como **indeterminado**. | Na operações matemáticas, ''NaN'' e ''NA'' atuam sempre como **indeterminado**. | ||
+ | |||
+ | |||
+ | === Exercícios === | ||
Linha 281: | Linha 282: | ||
O que acontece se você criar uma variável com o nome ''pi''? Por exemplo, | O que acontece se você criar uma variável com o nome ''pi''? Por exemplo, | ||
- | <code> | + | <code rsplus> |
> pi = 10 | > pi = 10 | ||
</code> | </code> | ||
O que acontece com a constante //pi//? | O que acontece com a constante //pi//? | ||
- | E se for criada uma constante de nome ''sqrt''? O que acontece com a função raíz quadrada (''sqrt()'')? | + | E se for criada uma constante de nome ''sqrt''? O que acontece com a função raiz quadrada (''sqrt()'')? |
**DICA:** O que faz a função ''search'', no comando: | **DICA:** O que faz a função ''search'', no comando: | ||
- | <code> | + | <code rsplus> |
> search() | > search() | ||
</code> | </code> | ||
</box> | </box> | ||
- | |||
- | |||
- | === Exercícios === | ||
<box left red 80%| //**2.6. Exercício Conceitual:** O que é uma Observação Perdida//> | <box left red 80%| //**2.6. Exercício Conceitual:** O que é uma Observação Perdida//> | ||
Linha 342: | Linha 340: | ||
=== Concatenação de Elementos em um Vetor: a Função "c" === | === Concatenação de Elementos em um Vetor: a Função "c" === | ||
- | Para criar um vetor, podemos usar a função ''c'' (c = colar, concatenar). Essa função simplesmente junta todos | + | Para criar um vetor, podemos usar a função ''c'' (c = concatenar). Essa função simplesmente junta todos |
os argumentos dados a ela, formando um vetor: | os argumentos dados a ela, formando um vetor: | ||
- | <code> | + | <code rsplus> |
> a = c(1, 10, 3.4, pi, pi/4, exp(-1), log( 2.23 ), sin(pi/7) ) | > a = c(1, 10, 3.4, pi, pi/4, exp(-1), log( 2.23 ), sin(pi/7) ) | ||
> a | > a | ||
Linha 353: | Linha 351: | ||
=== Criação de Sequências: Operador ":" e Função "seq" === | === Criação de Sequências: Operador ":" e Função "seq" === | ||
- | Para criar vetores de números com intervalo fixo unitário (intervalo de 1) se utiliza o //operador seqüencial// ('':''): | + | Para criar vetores de números com intervalo fixo unitário (intervalo de 1) se utiliza o //operador sequencial// ('':''): |
- | <code> | + | <code rsplus> |
> b = 1:8 | > b = 1:8 | ||
> b | > b | ||
Linha 366: | Linha 364: | ||
</code> | </code> | ||
- | Uma forma mais flexível de criar seqüências de números (inteiros ou reais) é usando a função '''seq''': | + | Uma forma mais flexível de criar sequências de números (inteiros ou reais) é usando a função ''seq'': |
- | <code> | + | <code rsplus> |
> seq(10, 30) | > seq(10, 30) | ||
[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | ||
Linha 380: | Linha 378: | ||
=== Vetores de Valores Repetidos: Função "rep" === | === Vetores de Valores Repetidos: Função "rep" === | ||
- | Também é fácil criar uma seqüência de números repetidos utilizando a função '''rep''': | + | Também é fácil criar uma sequência de números repetidos utilizando a função ''rep'': |
- | <code> | + | <code rsplus> |
> rep(5, 3) | > rep(5, 3) | ||
[1] 5 5 5 | [1] 5 5 5 | ||
Linha 398: | Linha 396: | ||
Uma palmeira perfilhada possui 10 fustes com os seguintes diâmetros: 5, 6, 7, 5, 10, 11, 6, 8, 9 e 7. | Uma palmeira perfilhada possui 10 fustes com os seguintes diâmetros: 5, 6, 7, 5, 10, 11, 6, 8, 9 e 7. | ||
- | Crie um vetor '''dap''' com os diâmetros acimas e uma seqüência que enumera os fustes. | + | Crie um vetor ''dap'' com os diâmetros acima e uma sequência que enumera os fustes. |
</box> | </box> | ||
Linha 416: | Linha 414: | ||
Todas operações matemáticas aplicadas sobre um vetor, serão aplicadas sobre cada elemento desse vetor: | Todas operações matemáticas aplicadas sobre um vetor, serão aplicadas sobre cada elemento desse vetor: | ||
- | <code> | + | <code rsplus> |
> 2 * a | > 2 * a | ||
[1] 2.0000000 20.0000000 6.8000000 6.2831853 1.5707963 0.7357589 1.6040032 | [1] 2.0000000 20.0000000 6.8000000 6.2831853 1.5707963 0.7357589 1.6040032 | ||
Linha 432: | Linha 430: | ||
Se as variáveis que trabalhamos são vetores, operações matemáticas entre variáveis serão realizadas | Se as variáveis que trabalhamos são vetores, operações matemáticas entre variáveis serão realizadas | ||
pareando os elementos dos vetores: | pareando os elementos dos vetores: | ||
- | <code> | + | <code rsplus> |
> a* b | > a* b | ||
[1] 1.000000 20.000000 10.200000 12.566371 3.926991 2.207277 5.614011 | [1] 1.000000 20.000000 10.200000 12.566371 3.926991 2.207277 5.614011 | ||
Linha 455: | Linha 453: | ||
A função ''length'' retorna o número de elementos de um objeto: | A função ''length'' retorna o número de elementos de um objeto: | ||
- | <code> | + | <code rsplus> |
> a <- seq(from=0, to=10, by=2) | > a <- seq(from=0, to=10, by=2) | ||
> a | > a | ||
Linha 476: | Linha 474: | ||
Quando o comprimento do vetor maior não é múltiplo do comprimento do maior, o R retorna o resultado e um aviso: | Quando o comprimento do vetor maior não é múltiplo do comprimento do maior, o R retorna o resultado e um aviso: | ||
- | <code> | + | <code rsplus> |
> b | > b | ||
[1] 0 0 0 0 0 1 1 1 1 1 | [1] 0 0 0 0 0 1 1 1 1 1 | ||
Linha 484: | Linha 482: | ||
[1] 0 0 0 0 0 3 1 2 3 1 | [1] 0 0 0 0 0 3 1 2 3 1 | ||
Warning message: | Warning message: | ||
- | In c * b : longer object length is not a multiple of shorter object length | + | In c * b : longer object length 'is' not a multiple of shorter object length |
> length(b) | > length(b) | ||
[1] 10 | [1] 10 | ||
Linha 494: | Linha 492: | ||
Mas se o comprimento do vetor maior é um múltiplo do maior, o R retorna apenas o resultado, sem nenhum alerta: | Mas se o comprimento do vetor maior é um múltiplo do maior, o R retorna apenas o resultado, sem nenhum alerta: | ||
- | <code> | + | <code rsplus> |
> a | > a | ||
[1] 1 2 | [1] 1 2 | ||
Linha 524: | Linha 522: | ||
<box left red | //**Exercício 2.9.** Bits e Bytes//> | <box left red | //**Exercício 2.9.** Bits e Bytes//> | ||
- | Como construir uma seqüência que representa o aumento do número | + | Como construir uma sequência que representa o aumento do número |
de bits por byte de computador, quando se dobra o tamanho dos bytes? | de bits por byte de computador, quando se dobra o tamanho dos bytes? | ||
- | Essa seqüência numérica parte do 2 e dobra os valores a cada passo. | + | Essa sequência numérica parte do 2 e dobra os valores a cada passo. |
</box> | </box> | ||
Linha 547: | Linha 545: | ||
As funções matemáticas sobre vetores operam //elemento-a-elemento//. Já as funções estatísticas operam no vetor **como um todo**: | As funções matemáticas sobre vetores operam //elemento-a-elemento//. Já as funções estatísticas operam no vetor **como um todo**: | ||
- | <code> | + | <code rsplus> |
> mean( a ) | > mean( a ) | ||
[1] 2.491344 | [1] 2.491344 | ||
Linha 566: | Linha 564: | ||
Algumas funções úteis que não são estatísticas, mas operam no vetor são: | Algumas funções úteis que não são estatísticas, mas operam no vetor são: | ||
- | <code> | + | <code rsplus> |
> a | > a | ||
[1] 1.0000000 10.0000000 3.4000000 3.1415927 0.7853982 0.3678794 0.8020016 | [1] 1.0000000 10.0000000 3.4000000 3.1415927 0.7853982 0.3678794 0.8020016 | ||
Linha 608: | Linha 606: | ||
Já foi visto que ao se digitar o nome de uma função na linha de comando, o R retorna o **código** da função. Veja a diferença de: | Já foi visto que ao se digitar o nome de uma função na linha de comando, o R retorna o **código** da função. Veja a diferença de: | ||
- | <code> | + | <code rsplus> |
> ls() | > ls() | ||
</code> | </code> | ||
para: | para: | ||
- | <code> | + | <code rsplus> |
> ls | > ls | ||
</code> | </code> | ||
Linha 620: | Linha 618: | ||
Os argumentos de qualquer função são detalhadamente explicados nas páginas de ajuda sobre a função. Mas para uma rápida consulta dos argumentos de uma função podemos usar a função '''args''': | Os argumentos de qualquer função são detalhadamente explicados nas páginas de ajuda sobre a função. Mas para uma rápida consulta dos argumentos de uma função podemos usar a função '''args''': | ||
- | <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 635: | Linha 633: | ||
</code> | </code> | ||
- | Algumas funções, entretanto, são primitivas ou internas e seus argumentos não são apresentados. Geralmente, nesses casos os argumentos são bastante óbvios: | + | Algumas funções, entretanto, são primitivas ou internas e seus argumentos não são apresentados. Geralmente, nesses casos os argumentos são bastante óbvios: |
- | <code> | + | <code rsplus> |
> args(sin) | > args(sin) | ||
NULL | NULL | ||
Linha 645: | Linha 643: | ||
Outras funções simplesmente não possuem argumentos: | Outras funções simplesmente não possuem argumentos: | ||
- | <code> | + | <code rsplus> |
> args(getwd) | > args(getwd) | ||
function () | function () | ||
Linha 658: | Linha 656: | ||
Ao observar o resultado da função '''args''', você notará que alguns argumentos são seguidos de uma expressão que se inicia com o sinal de igualdade ('''='''). A expressão após o sinal de igualdade é chamada de **valor default** do argumento. Se o usuário não informar o valor para um dado argumento, a função usa o valor default. Como exemplo veja a função '''save.image''': | Ao observar o resultado da função '''args''', você notará que alguns argumentos são seguidos de uma expressão que se inicia com o sinal de igualdade ('''='''). A expressão após o sinal de igualdade é chamada de **valor default** do argumento. Se o usuário não informar o valor para um dado argumento, a função usa o valor default. Como exemplo veja a função '''save.image''': | ||
- | <code> | + | <code rsplus> |
> args(save.image) | > args(save.image) | ||
function (file = ".RData", version = NULL, ascii = FALSE, compress = !ascii, | function (file = ".RData", version = NULL, ascii = FALSE, compress = !ascii, | ||
Linha 702: | Linha 700: | ||
A distribuição Normal é a distribuição central da teoria estatística. Para gerar uma amostra de observações de uma distribuição normal utilizamos a função '''rnorm''': | A distribuição Normal é a distribuição central da teoria estatística. Para gerar uma amostra de observações de uma distribuição normal utilizamos a função '''rnorm''': | ||
- | <code> | + | <code rsplus> |
> args( rnorm ) | > args( rnorm ) | ||
function (n, mean = 0, sd = 1) | function (n, mean = 0, sd = 1) | ||
Linha 725: | Linha 723: | ||
Se quisermos saber a //probabilidade acumulada// até um certo valor de uma variável com distribuição normal utilizamos a função '''pnorm''': | Se quisermos saber a //probabilidade acumulada// até um certo valor de uma variável com distribuição normal utilizamos a função '''pnorm''': | ||
- | <code> | + | <code rsplus> |
> args(pnorm ) | > args(pnorm ) | ||
function (q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) | function (q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) | ||
Linha 744: | Linha 742: | ||
Se quisermos obter o valor de um //quantil// da distribuição normal utilizamos a função '''qnorm''': | Se quisermos obter o valor de um //quantil// da distribuição normal utilizamos a função '''qnorm''': | ||
- | <code> | + | <code rsplus> |
> args( qnorm ) | > args( qnorm ) | ||
function (p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) | function (p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) | ||
Linha 761: | Linha 759: | ||
A função '''dnorm''' fornece a //densidade probabilística// para cada valor de uma variável Normal: | A função '''dnorm''' fornece a //densidade probabilística// para cada valor de uma variável Normal: | ||
- | <code> | + | <code rsplus> |
> args( dnorm ) | > args( dnorm ) | ||
function (x, mean = 0, sd = 1, log = FALSE) | function (x, mean = 0, sd = 1, log = FALSE) | ||
NULL | NULL | ||
- | > x = seq(-4, 4, length=10000) # Seqüência de -4 a 4 com 10.000 valores | + | > x = seq(-4, 4, length=10000) # Sequencia de -4 a 4 com 10.000 valores |
> | > | ||
> plot(x, dnorm(x)) # Curva da Dist. Normal com média 0 e desvio padrão 1 | > plot(x, dnorm(x)) # Curva da Dist. Normal com média 0 e desvio padrão 1 | ||
Linha 778: | Linha 776: | ||
<box left red 100% | //**Exercício 2.13** Amplitude Normal//> | <box left red 100% | //**Exercício 2.13** Amplitude Normal//> | ||
- | Tomando uma variável que segue a Distribuição Normal, o que acontence com a //amplitude de variação// dos dados à medida que o tamanho da amostra cresce (por exemplo n= 100, 1000, 10000)? | + | Tomando uma variável que segue a Distribuição Normal, o que acontece com a //amplitude de variação// dos dados à medida que o tamanho da amostra cresce (por exemplo n= 100, 1000, 10000)? |
**Dica:** use as funções ''range'' e ''diff'' | **Dica:** use as funções ''range'' e ''diff'' | ||
Linha 786: | Linha 784: | ||
<box left red 100% | //**Exercício 2.14.** Intervalo Normal I //> | <box left red 100% | //**Exercício 2.14.** Intervalo Normal I //> | ||
- | Qual o intervalo da Distribuição Normal Padronizada que têm a média no centro e contem 50% das observações? | + | Qual o intervalo da Distribuição Normal Padronizada que têm a média no centro e contém 50% das observações? |
</box> | </box> | ||
Linha 880: | Linha 878: | ||
<box left red red 100% | //**Exercício 2.20.** Gráfico Quantil-Quantil //> | <box left red red 100% | //**Exercício 2.20.** Gráfico Quantil-Quantil //> | ||
Construa uma seqüência **ordenada** de 1000 números entre 0 e 1: | Construa uma seqüência **ordenada** de 1000 números entre 0 e 1: | ||
- | <code> | + | <code rsplus> |
> p = seq(0, 1, length=1000) | > p = seq(0, 1, length=1000) | ||
</code> | </code> | ||
Linha 886: | Linha 884: | ||
Gere 1000 números aleatórios da distribuição Normal com média e desvio-padrão 1 (um) e coloque os números em ordem: | Gere 1000 números aleatórios da distribuição Normal com média e desvio-padrão 1 (um) e coloque os números em ordem: | ||
- | <code> | + | <code rsplus> |
> x = sort( rnorm(1000, mean=1) ) | > x = sort( rnorm(1000, mean=1) ) | ||
</code> | </code> | ||
Faça um gráfico dos quantis da distribuição Normal, tomando o vetor '''p''' de probabilidades, contra os valores de '''x''': | Faça um gráfico dos quantis da distribuição Normal, tomando o vetor '''p''' de probabilidades, contra os valores de '''x''': | ||
- | <code> | + | <code rsplus> |
> plot( qnorm(p, mean=1), x ) | > plot( qnorm(p, mean=1), x ) | ||
</code> | </code> | ||
Linha 903: | Linha 901: | ||
- | ===== Soluções dos Exercícios ===== | ||
/* | /* | ||
+ | ===== Soluções dos Exercícios ===== | ||
+ | |||
{{:03_apostila:exerc3apostila.r|Aqui}} você encontra os códigos que solucionam alguns dos exercícios propostos. | {{:03_apostila:exerc3apostila.r|Aqui}} você encontra os códigos que solucionam alguns dos exercícios propostos. | ||