R (linguagem de programação)/Matemática
As operações matemáticas em R são muito semelhantes a quase todas outras linguagens de programação, com as operações binárias de soma (+), subtração (-), multiplicação (*), divisão (/), potência (^ ou **) e módulo (%%), e a operação unária do inverso aditivo (-).
Ajuda
[editar | editar código-fonte]Se alguém ainda tem dúvida, pode obter ajuda com:
?Arithmetic
Valores errados ou impossíveis
[editar | editar código-fonte]R sempre executa as operações aritméticas. O resultado, porém, só fará sentido se a operação também fizer. Assim 1/0 retorna Inf (infinito), (-1)/0 retorna -Inf, 1/Inf retorna 0, Inf - Inf retorna NaN, etc. NA e NaN absorvem qualquer conta, com NA absorvendo NaN:
NA * 0 # NA NaN * 0 # NaN NA - NaN # NA
Divisão e módulo
[editar | editar código-fonte]A divisão é real (ou complexa); para obter a divisão inteira, usar x %/% y.
O módulo é implementado de forma matematicamente correta, ou seja, (-1) %% 3 é 2 (e não -1, como em C e outras linguagens que implementam o módulo de forma errada).
Operações com vetores, matrizes e arrays
[editar | editar código-fonte]As operações aritméticas são aplicáveis a vetores, matrizes e arrays - aliás, esta é a forma de otimizar a velocidade de execução dos programas, ao reescrever o código para pensar de forma vetorial.
Um vetor (matriz, array, etc) operado com outro vetor (matriz, array, etc) de mesma dimensão faz a operação elemento a elemento. Assim:
x <- c(1, 2, 3) y <- c(4, 5, 6) x * y
cria um vetor formado pelos produtos dos elementos individuais de x e y, ou seja, c(1 * 4, 2 * 5, 3 * 6).
Se um dos dois vetores tiver tamanho menor que o outro, ele será replicado até atingir o tamanho do outro, e depois a operação é feita. Assim, multiplicar um escalar por um vetor é simplesmente escrito como lambda * v.
Como, para matrizes m1 e m2, m1 * m2 é o produto elemento-a-elemento, a multiplicação de matrizes é feita por m1 %*% m2.
Por construção, as funções matemáticas usuais (seno, exponencial, raiz quadrada, etc) se aplicam aos vetores, preservando a estrutura e gerando um resultado de mesmo tipo. Por exemplo:
x <- 0:16 y <- sqrt(x) y
irá mostrar um vetor com as raizes quadradas dos números de zero a dezesseis.