Select Page

# How to Solve R Error: Multiplication requires numeric/complex matrix/vector arguments

by | Programming, R, Tips

This error occurs when you try to perform matrix multiplication with a data frame instead of a matrix. The `%*%` operator cannot handle data frames. You can solve the error by converting the data frame to a matrix using the `as.matrix()` function. For example,

```data <- data.frame(x = 1:4,
y = c(4, 9, 1, 10),
z = sample(200, 4))

mat <- as.matrix(data)```

This tutorial will go through the error in detail with code examples.

## Example

Let’s look at an example to reproduce the error. First, we will define a data frame.

```# Create data frame

data <- data.frame(x = 1:4,
y = c(4, 9, 1, 10),
z = sample(200, 4))```
```  x  y   z
1 1  4  73
2 2  9 172
3 3  1 107
4 4 10 114```

Next, we will try to multiply the data frame by its transpose using the matrix multiplication operator %*%.

```# Get transpose of data frame using t() and attempt multiply by original data frame

data_by_transpose <- t(data) %*% data```

Let’s run the code to see what happens:

```Error in t(data) %*% data :
requires numeric/complex matrix/vector arguments```

The error occurs because we are attempting to do matrix multiplication, but the `%*%` handles matrix objects, not data frames.

### Solution

We can solve the error by converting the data frame to a matrix using the `as.matrix()` function.

```mat <- as.matrix(data)
mat```
```     x  y   z
[1,] 1  4  73
[2,] 2  9 172
[3,] 3  1 107
[4,] 4 10 114```

Once we have the matrix, we can perform the matrix multiplication operation.

`data_by_transpose <- t(mat) %*% mat`

Let’s run the code to get the resultant matrix.

```     x    y     z
x   30   65  1194
y   65  198  3087
z 1194 3087 59358```

## Summary

Congratulations on reading to the end of this tutorial!

For further reading on R-related errors, go to the articles:

Go to the online courses page on R to learn more about coding in R for data science and machine learning.

Have fun and happy researching!