Ferramentas do usuário

Ferramentas do site


03_apostila:03-funcoes

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
03_apostila:03-funcoes [2020/08/17 18:21]
adalardo [Mantendo a Coerência Lógica-Matemática]
03_apostila:03-funcoes [2023/08/22 12:51] (atual)
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
Linha 191: 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 201: 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?​+sua área transversal ​de cada fuste?
  
 </​box>​ </​box>​
Linha 209: 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 267: Linha 266:
  
 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 280: 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 341: 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 352: 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 365: 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 379: 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 397: 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 415: 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 431: 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 454: 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 475: 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 483: 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 493: 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 523: 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 546: 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 565: 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 607: 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 619: 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 634: 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 644: 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 657: 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 700: Linha 699:
 ==== Distribuição Normal ==== ==== Distribuição Normal ====
  
-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 723: Linha 722:
 </​code>​ </​code>​
  
-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 742: Linha 741:
  
  
-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 759: Linha 758:
 </​code>​ </​code>​
  
-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 777: 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 785: 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 879: 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 885: 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>​
03_apostila/03-funcoes.1597699276.txt.gz · Última modificação: 2020/08/17 18:21 por adalardo