It depends on context as to what =
means. ==
is always for testing equality.
=
can be
- in most cases used as a drop-in replacement for
<-
, the assignment operator.> x = 10 > x [1] 10
- used as the separator for key-value pairs used to assign values to arguments in function calls.
rnorm(n = 10, mean = 5, sd = 2)
Because of 2. above, =
can’t be used as a drop-in replacement for <-
in all situations. Consider
> rnorm(N <- 10, mean = 5, sd = 2) [1] 4.893132 4.572640 3.801045 3.646863 4.522483 4.881694 6.710255 6.314024 [9] 2.268258 9.387091 > rnorm(N = 10, mean = 5, sd = 2) Error in rnorm(N = 10, mean = 5, sd = 2) : unused argument (N = 10) > N [1] 10
Now some would consider rnorm(N <- 10, mean = 5, sd = 2)
poor programming, but it is valid and you need to be aware of the differences between =
and <-
for assignment.
==
is always used for equality testing:
> set.seed(10) > logi <- sample(c(TRUE, FALSE), 10, replace = TRUE) > logi [1] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE > logi == TRUE [1] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE > seq.int(1, 10) == 5L [1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
Do be careful with ==
too however, as it really means exactly equal to and on a computer where floating point operations are involved you may not get the answer you were expecting. For example, from ?'=='
:
> x1 <- 0.5 - 0.3 > x2 <- 0.3 - 0.1 > x1 == x2 # FALSE on most machines [1] FALSE > identical(all.equal(x1, x2), TRUE) # TRUE everywhere [1] TRUE
where all.equal()
tests for equality allowing for a little bit of fuzziness due to loss of precision/floating point operations.