# Issue

What is the difference between `=`

and `==`

? I have found cases where the double equal sign will allow my script to run while one equal sign produces an error message. When should I use `==`

instead of `=`

?

# Solution

It depends on context as to what `=`

means. `==`

is always for testing equality.

`=`

can be

used as a drop-in replacement for*in most cases*`<-`

, 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.

Answered By - Gavin Simpson Answer Checked By - Dawn Plyler (PHPFixing Volunteer)

## 0 Comments:

## Post a Comment

Note: Only a member of this blog may post a comment.