Recently I was working on my WIP package ‘verhoeff’, for calculating check digits based on the Verhoeff algorithim. I was at the stage where most of the basic code was written, so I was starting to test simple examples.

I was testing an early implementation which I thought would work. I used the code

`calculate_digit(prepare_number(1), dat$d5, dat$d5_p, dat$inv_v)`

In this code, `prepare_number`

simply does some checks to see if the number is valid, and converts it to a numeric vector. The other arguments are the matrices needed for the Verhoeff math.

I got the error:

```
Error in d5_p[(i%%8) + 1, number + 1] + 1 :
non-numeric argument to binary operator
```

The traceback showed this came from the code

```
d5_p_calc <- function(d5_p, i, number) {
d5_p[(i %% 8) + 1, number + 1] + 1
}
```

My first step in debugging this was to load the matrix I needed and write bits of the function by hand. I know that I use the `%%`

operator, so I assumed one of its arguments was not numeric.

```
d5_matrix <- matrix(c("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"1", "2", "3", "4", "0", "6", "7", "8", "9", "0",
"2", "3", "4", "0", "1", "7", "8", "9", "5", "6",
"3", "4", "0", "1", "2", "8", "9", "5", "6", "7",
"4", "0", "1", "2", "3", "9", "5", "6", "7", "8",
"5", "9", "8", "7", "6", "0", "4", "3", "2", "1",
"6", "5", "9", "8", "7", "1", "0", "4", "3", "2",
"7", "6", "5", "9", "8", "2", "1", "0", "4", "3",
"8", "7", "6", "5", "9", "3", "2", "1", "0", "4",
"9", "8", "7", "6", "5", "4", "3", "2", "1", "0"),
nrow = 10, ncol = 10)
# Here I'm breaking the problem down by dropping the final `+ 1`
d5_matrix[(1 %% 8) + 1, 3 + 1]
```

`## [1] "4"`

So that ran fine. Hmm, so the error cant be with `%%`

. What happens if we add the final `+ 1`

that is missing

`d5_matrix[(1 %% 8) + 1, 3 + 1] + 1`

`## Error in d5_matrix[(1%%8) + 1, 3 + 1] + 1: non-numeric argument to binary operator`

Ah ha! Now we’ve reproduced our error. So why does adding one to a matrix throw a non-numeric error?

Well if you look back at the matrix I created, you notice I did something veeeeery silly. All of the numbers that make up the matrix are quoted - so they make a *character* matrix not a *numeric* matrix. And you cant add the number 1 to a character.

Once I made the matrix integers instead of characters, it worked fine!