2

I would like to be able to sample a matrix column at random in R.

Let's say I have the matrix

x <- matrix(1:10, nrow = 5, ncol = 2)

x
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

To sample one column at random, I do

y <- x[sample(ncol(x), size = 1)]

However, what is returned is not a list of sorted values corresponding to either column 1 or 2 of the matrix x.

Essentially, I would like y to return either column 1 or column 2 at random, exactly as written in the matrix, but I can't seem to understand what's happening here.

Any thoughts?

0

1 Answer 1

1

When we are working with matrix, the indexing should be row, column (similar to data.frame - but in data.frame if we don't specify the ,, by default it will give the columns as columns are the individual units). In a matrix, the individual unit is an element. So, without the row,column, it extracts the element based on that position. To avoid that, use ,. One more thing is that when we have a single column/row, it will drop the dimensions as drop = TRUE by default for ?Extract

x[,sample(ncol(x), size = 1), drop = FALSE]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.