Along the lines of Chase’s answer, I usually use as.data.frame to coerce the matrix to a data.frame:

m <- as.data.frame(matrix(0, ncol = 30, nrow = 2))

EDIT: speed test data.frame vs. as.data.frame

1
system.time(replicate(10000, data.frame(matrix(0, ncol = 30, nrow = 2))))   user  system elapsed   8.005   0.108   8.165 system.time(replicate(10000, as.data.frame(matrix(0, ncol = 30, nrow = 2))))   user  system elapsed   3.759   0.048   3.802 

Yes, it appears to be faster (by about 2 times).