The matrix method doesn't reference column names the same way that you can with data frames. You probably want:
subset(mat.num, mat.num[,2] <= -3)
If you look at the code for subset.matrix
you'll see that it's not evaluating the subset criteria inside any special environment:
if (missing(subset))
subset <- TRUE
else if (!is.logical(subset))
stop("'subset' must be logical")
x[subset & !is.na(subset), vars, drop = drop]
as opposed to subset.data.frame
which is using eval
and substitute
.