Mark.Bravington@csiro.au
2003-Feb-27 04:11 UTC
[Rd] unwanted coercion of length 0 vectors (PR#2587)
When something is assigned to an element of a vector that was previously of length 0, the vector is coerced to the mode of the something, regardless of whether the coercion is necessary under normal R rules. In particular, if NA is assigned to an element of a vector that was previously length 0, the mode of the vector is coerced to 'logical'. For example, here's the normal behaviour: test> x1_ 5 test> x1[1]_ NA test> x1 [1] NA test> mode( x1) [1] "numeric" No coercion was required because 'logical' (the default mode of NA) is "ancestral" to 'numeric'. Note also that assigning to a hitherto non-existent element of x1, e.g. x1[2]_ NA, also does not coerce. But: test> x0_ numeric( 0) test> x0[1]_ NA test> mode( x0) [1] "logical" Similar things happen with vectors of mode 'complex' and even 'character': test> xc0_ complex( 0) test> xc0[1]_ 3 test> mode( xc0) [1] "numeric" # should be 'complex' test> xch0_ character(0) test> xch0[ 1]_ 3 test> mode( xch0) [1] "numeric" Intriguingly, something strange happens even with lists: test> xl1_ list( 1) test> xl1[1]_ 3 test> xl1 [[1]] [1] 3 test> xl0_ list() test> xl0[1]_ 3 Error: (list) object cannot be coerced to vector type 14 cheers Mark mark.bravington@csiro.au --please do not edit the information below-- Version: platform = i386-pc-mingw32 arch = i386 os = mingw32 system = i386, mingw32 status = major = 1 minor = 6.2 year = 2003 month = 01 day = 10 language = R Windows 2000 Professional (build 2195) Service Pack 2.0 Search Path: .GlobalEnv, ROOT, package:handy, package:debug, mvb.session.info, package:mvbutils, package:tcltk, Autoloads, package:base