>>>>> "PS" == Petr Savicky <savi...@cs.cas.cz> >>>>> on Sun, 3 May 2009 22:32:04 +0200 writes: >>>>> "PS" == Petr Savicky <savi...@cs.cas.cz> >>>>> on Sun, 3 May 2009 22:32:04 +0200 writes:
PS> In R-2.10.0, the development version, function as.factor() uses 17 digit PS> precision for conversion of numeric values to character type. This PS> is very good for the consistency of the resulting factor, however, PS> i expect that people will complain about, for example, as.factor(0.3) PS> being PS> [1] 0.29999999999999999 PS> Levels: 0.29999999999999999 PS> I suggest to extend the "Warning" section of ?as.factor by the following PS> paragraph. PS> If as.factor() is used for a numeric vector, then the numbers are PS> converted to character strings with 17 digit precision using their PS> machine representation. This guarantees that different numbers are PS> converted to different levels, but may produce unwanted results, if PS> the numbers are expected to have limited number of decimal positions. PS> For example, as.factor(c(0.1, 0.2, 0.3)) produces PS> [1] 0.10000000000000001 0.20000000000000001 0.29999999999999999 PS> Levels: 0.10000000000000001 0.20000000000000001 0.29999999999999999 PS> In order to avoid this, convert the numbers to a character vector PS> using formatC() or a similar function before using as.factor(). PS> Petr. Thank you, Petr, for the good suggestion. I have added a (shorter) paragraph, though to the 'Details' not the 'Warning' section, and also one to the 'Examples' : ## Converting (non-integer) numbers: as.factor(c(0.1, 0.2, 0.3)) # maybe not what you'd expect, so rather use factor(format(c(0.1, 0.2, 0.3))) Martin Maechler, ETH Zurich ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel