Stata has a command called compress which looks through all the data rows and tries to coerce each to the most efficient format. For instance, if you have a bunch of integers stored as a character vector within a data.frame, it will coerce that to integer.
I can imagine how one might write such a function in R, but does it exist already?
Technically,
read.tabledoes exactly that with the help oftype.convert. So you could use that – it is not the most efficient way but probably the easiest:In practice it may be better to do that selectively, though, so you only touch characters/factors: