pogibas
pogibas

Reputation: 28329

Exclude specific columns from a matrix

I have a list of numbers (example bellow):

[[178]]
NULL

[[179]]
[1] 179  66

[[180]]
[1] 180  67

[[181]]
[1] 181 123

[[182]]
[1] 182

This list contains columns (179, 66, 180, 67, 181, 123) I want to exclude from a matrix.

I tried commands bellow, but they didn't work:

MyMatrix[, !(unlist(MyList))]
MyMatrix[, -(unlist(MyList))]
MyMatrix[, !unlist(MyList)]
MyMatrix[, -unlist(MyList)]

My question: what is a right way to exclude specific columns from a matrix?

Upvotes: 0

Views: 1211

Answers (1)

DMT
DMT

Reputation: 1647

Here's my small replication of your problem.

listOfColumns<-list(NULL, c(2,3), 5, NULL)
listOfColumns  #print for viewing
#output
#[[1]]
#NULL

#[[2]]
#[1] 2 3

#[[3]]
#[1] 5

#[[4]]
#NULL

MyMatrix<-matrix(1:50, nrow=10, ncol=5)
MyMatrix    #print for viewing
#output
 #        [,1] [,2] [,3] [,4] [,5]
 #[1,]    1   11   21   31   41
 #[2,]    2   12   22   32   42
 #[3,]    3   13   23   33   43
 #[4,]    4   14   24   34   44
 #[5,]    5   15   25   35   45
 #[6,]    6   16   26   36   46
 #[7,]    7   17   27   37   47
 #[8,]    8   18   28   38   48
 #[9,]    9   19   29   39   49
 #[10,]   10   20   30   40   50

First, the way you're going to want to subset your matrix so that you omit the given column numbers is to do

MyMatrix[-columnNumbers]

In R, negative numbers used to subset correspond to entries that should be omitted.

The following call output's what you want

 MyMatrix[,-unlist(listOfNumbers)] 
#output
#      [,1] [,2]
# [1,]    1   31
# [2,]    2   32
# [3,]    3   33
# [4,]    4   34
# [5,]    5   35
# [6,]    6   36
# [7,]    7   37
# [8,]    8   38
# [9,]    9   39
# [10,]   10   40

If you want to keep this result for later use, you'll need to store it (As David Robinson got at)

MySmallerMatrix<-MyMatrix[,-unlist(listOfNumbers)] 

Upvotes: 1

Related Questions