meta data for this page
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
pt:cursos_online:s_linguagem:10-nocoes-programacao:10-04-vetorizacao [2024/10/21 15:31] – [10.4.3. A Função "Vectorize"] joaoluis | pt:cursos_online:s_linguagem:10-nocoes-programacao:10-04-vetorizacao [2024/10/22 00:04] (current) – removed joaoluis | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ~~NOTOC~~ | ||
- | |||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | {{ .: | ||
- | ------------------------------------------------------------------------- | ||
- | |||
- | |||
- | ====== 10.4. Vetorização ====== | ||
- | |||
- | |||
- | ===== 10.4.1. Argumentos não Vetoriais ===== | ||
- | ------------------------------- | ||
- | |||
- | Existem algumas operações vetoriais que não são possíveis devido ao desenho original das funções do R. Em várias funções, somente um dos argumentos pode ser um vetor com comprimento maior que um, enquanto que os demais argumentos são assumidos como // | ||
- | |||
- | Por exemplo, a função **'' | ||
- | < | ||
- | > args(dnorm) | ||
- | function (x, mean = 0, sd = 1, log = FALSE) | ||
- | NULL | ||
- | </ | ||
- | |||
- | * O argumento **'' | ||
- | * Os argumentos **'' | ||
- | |||
- | Logo, a função **'' | ||
- | |||
- | |||
- | |||
- | Consideremos um exemplo numérico da função **'' | ||
- | < | ||
- | 1 ###################################################### | ||
- | 2 ########### 10. NOÇÕES DE PROGRAMAÇÃO | ||
- | 3 ########### 10.4. Vetorização | ||
- | 4 ###################################################### | ||
- | 5 # 10.4.1. Argumentos não Vetoriais | ||
- | 6 | ||
- | 7 args(dnorm) | ||
- | 8 | ||
- | 9 medias = seq(25, 30, length=7) | ||
- | 10 x = seq(-3,3, length=20) | ||
- | 11 y = dnorm(x, mean=medias, | ||
- | 12 length(y) | ||
- | 13 | ||
- | 14 sum(y - dnorm(x, mean=medias[1], | ||
- | 15 | ||
- | </ | ||
- | |||
- | O vetor **'' | ||
- | |||
- | \\ | ||
- | |||
- | ===== 10.4.2. A Função " | ||
- | ------------------------------- | ||
- | |||
- | Mas se quisermos construir um gráfico das densidades em função da média? | ||
- | < | ||
- | 16 # 10.4.2. A Função " | ||
- | 17 | ||
- | 18 minhas.medias = seq(25, 30, length=7) | ||
- | 19 meus.dados = seq(12,40, length=10) | ||
- | 20 y = sapply(minhas.medias, | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | 26 dim(y) | ||
- | 27 y | ||
- | 28 | ||
- | </ | ||
- | |||
- | A estrutura básica da função **'' | ||
- | <box 35% centered #004200> | ||
- | **'' | ||
- | </ | ||
- | onde: | ||
- | * **'' | ||
- | * **'' | ||
- | * " | ||
- | |||
- | Refazendo o exemplo de aplicação da função **'' | ||
- | < | ||
- | 29 minhas.medias = seq(-1, 1, length=100) | ||
- | 30 meus.dados = seq(-4,4, length=100) | ||
- | 31 y = sapply(minhas.medias, | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | 37 matplot(meus.dados, | ||
- | 38 matplot(minhas.medias, | ||
- | 39 | ||
- | 40 plot(minhas.medias, | ||
- | 41 | ||
- | </ | ||
- | |||
- | \\ | ||
- | |||
- | ===== 10.4.3. A Função " | ||
- | ------------------------------- | ||
- | |||
- | A função **'' | ||
- | |||
- | A melhor maneira é // | ||
- | |||
- | Considere a seguinte situação, desejamos construir um gráfico com a superfície da soma de quadrados do resíduo, para mostrar que a " | ||
- | |||
- | O primeiro passo é construir uma função que calcule a soma de quadrados do resísuo (RSS = residual sum of squares). | ||
- | < | ||
- | 42 # 10.4.3. A Função " | ||
- | 43 | ||
- | 44 RSS = function(b0, | ||
- | 45 { | ||
- | | ||
- | | ||
- | 48 } | ||
- | 49 | ||
- | </ | ||
- | |||
- | Podemos agora construir vetores para os coeficientes do modelo linear simples (**'' | ||
- | < | ||
- | 50 cax = read.csv(" | ||
- | 51 b0 = seq(-50, | ||
- | 52 b1 = seq(-0.2, | ||
- | 53 z = outer(b0, b1, RSS, caxh,caxcap) | ||
- | 54 | ||
- | </ | ||
- | |||
- | Ao executar o cálculo, o R //__tomará os elementos dos vetores de forma paralela__// | ||
- | < | ||
- | 55 length(b0); length(b1); length(caxh);length(caxcap) | ||
- | 56 | ||
- | </ | ||
- | |||
- | Para que façamos o R executar o cálculo tomando todos elementos de **b0** para cada elemento de **b1** e somando sobre os vetores de dados (**'' | ||
- | < | ||
- | 57 RSSv = Vectorize( FUN=RSS, vectorize.args = c(" | ||
- | 58 | ||
- | </ | ||
- | |||
- | Na nova função **'' | ||
- | < | ||
- | 59 b0 = seq(-50, | ||
- | 60 b1 = seq(-0.2, | ||
- | 61 z = outer(b0, b1, RSSv, caxh, caxcap) | ||
- | 62 dim(z) | ||
- | 63 | ||
- | </ | ||
- | |||
- | Agora podemos construir um gráfico com // | ||
- | < | ||
- | 64 image(b0, | ||
- | 65 contour(b0, b1, z, levels=seq(1, | ||
- | 66 abline( h = b1[ col(z)[z==min(z)] ], col=" | ||
- | 67 abline( v = b0[ row(z)[z==min(z)] ], col=" | ||
- | 68 | ||
- | </ | ||
- | |||
- | |||
- | \\ | ||
- | |||
- | ===== 10.4.4. Ordem de Prioridade dos Operadores do R ===== | ||
- | ------------------------------- | ||
- | |||
- | Outro aspecto formal importante da linguagem R é a ordem de prioridade de seus operadores. Além das regras de precedência usuais para as operações matemáticas, | ||
- | |||
- | <box 90% centered #004200> | ||
- | < | ||
- | ================================================================= | ||
- | | ||
- | ================================================================= | ||
- | $ | ||
- | | ||
- | | ||
- | | ||
- | : | ||
- | | ||
- | | ||
- | | ||
- | < > <= >= == != | ||
- | | ||
- | & && | ||
- | | ||
- | << | ||
- | ================================================================= | ||
- | </ | ||
- | </ | ||
- | |||
- | |||
- | Exemplos de como a ordem de prioridade pode gerar resultados diferentes: | ||
- | < | ||
- | 69 # 10.4.4. Ordem de Prioridade dos Operadores do R | ||
- | 70 | ||
- | 71 -1:10 | ||
- | 72 -(1:10) | ||
- | 73 | ||
- | 74 1:3^2 | ||
- | 75 (1:3)^2 | ||
- | 76 | ||
- | 77 1:5+2 | ||
- | 78 1:(5+2) | ||
- | 79 | ||
- | </ | ||
- | |||
- | |||
- | |||
- | \\ | ||
- | ------------------ | ||
- | \\ | ||
- | |||
- | |||