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 (-).


Se alguém ainda tem dúvida, pode obter ajuda com:

?Arithmetic

Valores errados ou impossíveis

editar

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

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

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.