R Language
Арифметические операторы
Поиск…
замечания
Почти все операторы в R действительно являются функциями. Например, +
- это функция, определенная как function (e1, e2) .Primitive("+")
где e1 - левая часть оператора, а e2 - правая часть оператора. Это означает, что можно выполнить довольно противоречивые эффекты, маскируя +
в базе с помощью определенной пользователем функции.
Например:
`+` <- function(e1, e2) {e1-e2}
> 3+10
[1] -7
Диапазон и дополнение
Возьмем пример добавления значения в диапазон (как это может быть сделано в цикле, например):
3+1:5
дает:
[1] 4 5 6 7 8
Это связано с тем, что оператор диапазона :
имеет более высокий приоритет, чем оператор сложения +
.
Что происходит во время оценки:
-
3+1:5
-
3+c(1, 2, 3, 4, 5)
расширение оператора диапазона для создания вектора целых чисел. -
c(4, 5, 6, 7, 8)
Добавление 3 к каждому члену вектора.
Чтобы избежать такого поведения, вы должны сообщить интерпретатору R, как вы хотите, чтобы он выполнял операции с ( )
следующим образом:
(3+1):5
Теперь R вычислит, что находится внутри круглых скобок, прежде чем расширять диапазон и дает:
[1] 4 5
Сложение и вычитание
Основные математические операции выполняются в основном по числам или по векторам (списки чисел).
1. Использование одиночных чисел
Мы можем просто ввести числа, объединенные с +
для добавления и -
для вычитания :
> 3 + 4.5
# [1] 7.5
> 3 + 4.5 + 2
# [1] 9.5
> 3 + 4.5 + 2 - 3.8
# [1] 5.7
> 3 + NA
#[1] NA
> NA + NA
#[1] NA
> NA - NA
#[1] NA
> NaN - NA
#[1] NaN
> NaN + NA
#[1] NaN
Мы можем присвоить числа переменным (константы в этом случае) и выполнить те же операции:
> a <- 3; B <- 4.5; cc <- 2; Dd <- 3.8 ;na<-NA;nan<-NaN
> a + B
# [1] 7.5
> a + B + cc
# [1] 9.5
> a + B + cc - Dd
# [1] 5.7
> B-nan
#[1] NaN
> a+na-na
#[1] NA
> a + na
#[1] NA
> B-nan
#[1] NaN
> a+na-na
#[1] NA
2. Использование векторов
В этом случае мы создаем векторы чисел и выполняем операции с использованием этих векторов или комбинаций с одиночными числами. В этом случае операция выполняется с учетом каждого элемента вектора:
> A <- c(3, 4.5, 2, -3.8);
> A
# [1] 3.0 4.5 2.0 -3.8
> A + 2 # Adding a number
# [1] 5.0 6.5 4.0 -1.8
> 8 - A # number less vector
# [1] 5.0 3.5 6.0 11.8
> n <- length(A) #number of elements of vector A
> n
# [1] 4
> A[-n] + A[n] # Add the last element to the same vector without the last element
# [1] -0.8 0.7 -1.8
> A[1:2] + 3 # vector with the first two elements plus a number
# [1] 6.0 7.5
> A[1:2] - A[3:4] # vector with the first two elements less the vector with elements 3 and 4
# [1] 1.0 8.3
Мы также можем использовать sum
функций для добавления всех элементов вектора:
> sum(A)
# [1] 5.7
> sum(-A)
# [1] -5.7
> sum(A[-n]) + A[n]
# [1] 5.7
Мы должны заботиться об утилизации , которая является одной из характеристик R
, поведение, которое происходит при выполнении математических операций, когда длина векторов различна. Более короткие векторы в выражении перерабатываются так часто, как нужно (возможно, дробно), пока они не совпадут с длиной самого длинного вектора. В частности, константа просто повторяется . В этом случае появляется предупреждение.
> B <- c(3, 5, -3, 2.7, 1.8)
> B
# [1] 3.0 5.0 -3.0 2.7 1.8
> A
# [1] 3.0 4.5 2.0 -3.8
> A + B # the first element of A is repeated
# [1] 6.0 9.5 -1.0 -1.1 4.8
Warning message:
In A + B : longer object length is not a multiple of shorter object length
> B - A # the first element of A is repeated
# [1] 0.0 0.5 -5.0 6.5 -1.2
Warning message:
In B - A : longer object length is not a multiple of shorter object length
В этом случае правильной процедурой будет рассмотрение только элементов более короткого вектора:
> B[1:n] + A
# [1] 6.0 9.5 -1.0 -1.1
> B[1:n] - A
# [1] 0.0 0.5 -5.0 6.5
При использовании функции sum
снова добавляются все элементы внутри функции.
> sum(A, B)
# [1] 15.2
> sum(A, -B)
# [1] -3.8
> sum(A)+sum(B)
# [1] 15.2
> sum(A)-sum(B)
# [1] -3.8