On Fri, Apr 25, 2014 at 09:23:23PM -0700, Tom Kraljevic wrote: > This, needless to say, is disruptive for us. (Actually, it was downright > shocking.)
It WAS somewhat shocking. I trust the R core team to get things right, and (AFAICT) they nearly always do. This was an exception, and shocking mostly in that it was so obviously wrong to completely discard all possibility of backwards compatibility. The old type.convert() functionality worked fine and was very useful, so the *obviously* right thing to do would be to at least retain the old behavior as a (non-default) option. Reproducing the old behavior in user R code is not simple. For anybody else stuck with this, you can do it (probably inefficiently) with the two functions below. Create your own version of read.table() that calls the dtk.type.convert() below instead of the stock type.convert(). It's not pretty, but that will do it. dtk.type.convert <- function(xx ,... ,ignore.signif.p=TRUE) { # Add backwards compatibility to R 3.1's "new feature": if(ignore.signif.p && all(dtk.can.be.numeric(xx ,ignore.na.p=TRUE))) { if(all(is.na(xx))) type.convert(xx ,...) else methods::as(xx ,"numeric") } else type.convert(xx ,...) } dtk.can.be.numeric <- function(xx ,ignore.na.p=TRUE) { # Test whether a value can be converted to numeric without becoming NA. # AKA, can this value be usefully represented as numeric? # Optionally ignore NAs already present in the incoming data. old.warn <- options(warn = -1) ; on.exit(options(old.warn)) aa <- !is.na(as.numeric(xx)) if(ignore.na.p) (is.na(xx) | aa) else aa } -- Andrew Piskorski <a...@piskorski.com> ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel