You know that you can tell it not to do that, right? drop=FALSE
> x <- data.frame(foo=1:5, bar=1:5, baz=1:5)
> dim(x[,'foo'])
NULL
> dim(x[,c('foo','bar')])
[1] 5 2
> dim(x[,'foo',drop=FALSE])
[1] 5 1
compared to > x <- dplyr::data_frame(foo=1:5, bar=1:5, baz=1:5)
> dim(x[,'foo'])
[1] 5 1
Although I think these are more reasonable (I've got multiple commits at work with messages bemoaning drop=FALSE), this can ironically also mess you up if you got used to the old defaults :)