to can be one of several values. Firstly the default of default
calls several additional functions that attempt to resolve a transformation
from a character vector to a different type. It is recommended for users
to enter their own specifications instead. Secondly, a function (with a
single argument) can be passed which will then be applied directly to x.
Third, a prototype value can be passed. This might be risky for special
types. Here, the values of mode(), storage.mode(), attributes(), and
class() are captured and reassigned from to to x. A special check is
implemented for factors to more safely convert. Lastly, NULL will do
nothing and will simply return x.