How to Convert Matrix Indexing Code from Matlab to R

I have a one-dimensional matrix called h1 and a 3-dimensional matrix called nv in my MATLAB code. I then run the code h1(nv) to create a new 3 column matrix hc. I need to convert this code into R. I am not sure how to do this sort of matrix indexing in R. I thought you used brackets for matrix indexing so I tried just doing h1[nv] but that gave me a 1-dimensional array instead of 3 columns like my MATLAB output so it definitely isn't doing the same thing.

1

1 Answer

Frustratingly (personal opinion), R's arrays drop a dimension on indexing if the indexing reduces any of its dimensions to length-1.

For example:

m <- matrix(1:6, nrow=2)
m[1,]
# [1] 1 3 5
m[,2]
# [1] 3 4

This can be seen a little more clearly (perhaps) when looking at a 3-dim array:

ary <- array(1:24, dim=c(3,4,2))
ary
# , , 1
#      [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# [2,]    2    5    8   11
# [3,]    3    6    9   12
# , , 2
#      [,1] [,2] [,3] [,4]
# [1,]   13   16   19   22
# [2,]   14   17   20   23
# [3,]   15   18   21   24

ary[1,,]
#      [,1] [,2]
# [1,]    1   13
# [2,]    4   16
# [3,]    7   19
# [4,]   10   22
ary[,2,]
#      [,1] [,2]
# [1,]    4   16
# [2,]    5   17
# [3,]    6   18

This can be avoided by adding ,drop=FALSE within the [-indexing brackets:

m[1,,drop=FALSE]
#      [,1] [,2] [,3]
# [1,]    1    3    5
m[,2,drop=FALSE]
#      [,1]
# [1,]    3
# [2,]    4
ary[1,,,drop=FALSE]
# , , 1
#      [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# , , 2
#      [,1] [,2] [,3] [,4]
# [1,]   13   16   19   22

(Note that you must include any intermediate unused commas, as n ary[1,,,drop=FALSE]. The drop= argument must always be in the (n+1)th position where the array has n dimensions.)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett

Chloe Bennett

Culture, Media & Entertainment Columnist

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.

Share this article
Twitter Facebook Pinterest