When working with R I frequently get the error message “subscript out of bounds”. For example:

```
# Load necessary libraries and data
library(igraph)
library(NetData)
data(kracknets, package = "NetData")
# Reduce dataset to nonzero edges
krack_full_nonzero_edges <- subset(krack_full_data_frame, (advice_tie > 0 | friendship_tie > 0 | reports_to_tie > 0))
# convert to graph data farme
krack_full <- graph.data.frame(krack_full_nonzero_edges)
# Set vertex attributes
for (i in V(krack_full)) {
for (j in names(attributes)) {
krack_full <- set.vertex.attribute(krack_full, j, index=i, attributes[i+1,j])
}
}
# Calculate reachability for each vertix
reachability <- function(g, m) {
reach_mat = matrix(nrow = vcount(g),
ncol = vcount(g))
for (i in 1:vcount(g)) {
reach_mat[i,] = 0
this_node_reach <- subcomponent(g, (i - 1), mode = m)
for (j in 1:(length(this_node_reach))) {
alter = this_node_reach[j] + 1
reach_mat[i, alter] = 1
}
}
return(reach_mat)
}
reach_full_in <- reachability(krack_full, 'in')
reach_full_in
```

This generates the following error `Error in reach_mat[i, alter] = 1 : subscript out of bounds`

.

However, my question is not about this particular piece of code (even though it would be helpful to solve that too), but my question is more general:

- What is the definition of a subscript-out-of-bounds error? What causes it?
- Are there any generic ways of approaching this kind of error?

This is because you try to access an array out of its boundary.

I will show you how you can debug such errors.

`options(error=recover)`

I run

`reach_full_in <- reachability(krack_full, 'in')`

I get :I enter 1 and I get

I type

`ls()`

to see my current variablesNow, I will see the dimensions of my variables :

You see that alter is out of bounds. 22 > 21 . in the line :

To avoid such error, personally I do this :

`applyxx`

function. They are safer than`for`

`seq_along`

and not`1:n`

(1:0)`mat[i,j]`

index access.EDIT vectorize the solutionFor example, here I see that you don’t use the fact that

`set.vertex.attribute`

is vectorized.You can replace:

by this: