>>>>> Gregory R Warnes >>>>> on Sat, 23 Sep 2023 13:22:35 -0400 writes:
> It sounds like we need to add arguments (with sensible > defaults) to complex(), Re(), Im(), is.na.complex() etc to > allow the user to specify the desired behavior. I don't think I'd like such extra flexibility for all these, ... ;-) and even much less I'd like to be part of the group who then has to *maintain* such behavior ;-) > -- > Change your thoughts and you change the world. > --Dr. Norman Vincent Peale ( .. *some* hybris from the last century ..) Currently, I'm actually tending to *simplify* things drastically, also because it means less surprises in the long term and much less code reading / debugging in formatting / printing and dealing with complex numbers. NB: there *is* the re-opened PR#16752, https://bugs.r-project.org/show_bug.cgi?id=16752 where the investigation of the (C-level) R source is a major reason for my current thinking .. What if we decided to really treat complex numbers much more than currently as pairs of real (i.e. "double") numbers, notably also when print()ing them? Consequently, Re() and Im() would continue to return what they do now (contrary to Hervé's original proposal) also in case of non-finite numbers. Of course, *no* change in arithmetic or other Ops (such as '==') nor is.na(), is.finite(), is.nan(), etc. The current formatting and printing of complex numbers is complicated in some cases unnecessarily inaccurate and in other cases unnecessarily *ugly*. I believe that formatting, we should change to basically format the (vector of) real parts and imaginary parts separately. E.g., it is really unnecessarily ugly to switch to exponential format for both Re and Im, in a situation like this: > (-1):2 + 1i*1e99 [1] 0e+00+1e+99i 0e+00+1e+99i 0e+00+1e+99i 0e+00+1e+99i It is very ugly to use exponential/scientific format for the Re() even if we'd fix the confusing and inaccurate *joint* rounding of Re and Im. ... and indeed (as discusses here previously: While it makes some sense to print NA identically for logical, integer and double, it seems often confusing *not* to show <Re> + <Im>i in the complex case; where that *does* happen for Inf and NaN: > complex(, NA, ((-1):2)) [1] NA NA NA NA > complex(, NaN, ((-1):2)) [1] NaN-1i NaN+0i NaN+1i NaN+2i > complex(, c(-Inf,Inf), ((-1):2)) [1] -Inf-1i Inf+0i -Inf+1i Inf+2i > where the first of these *does* keep the finite imaginary values, but does not show them > (cN <- complex(, NA, ((-1):2))); rbind(Re(cN), Im(cN)) [1] NA NA NA NA [,1] [,2] [,3] [,4] [1,] NA NA NA NA [2,] -1 0 1 2 > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel