Revisiting this thread from April: https://stat.ethz.ch/pipermail/r-devel/2023-April/082545.html
where the decision (not yet backported) was made for as.complex(NA_real_) to give NA_complex_ instead of complex(r=NA_real_, i=0), to be consistent with help("as.complex") and as.complex(NA) and as.complex(NA_integer_). Was any consideration given to the alternative? That is, to changing as.complex(NA) and as.complex(NA_integer_) to give complex(r=NA_real_, i=0), consistent with as.complex(NA_real_), then amending help("as.complex") accordingly? The principle that Im(as.complex(<real=(double|integer|logical)>)) should be zero is quite fundamental, in my view, hence the "new" behaviour seems to really violate the principle of least surprise ... Another (but maybe weaker) argument is that double->complex coercions happen more often than logical->complex and integer->complex ones. Changing the behaviour of the more frequently performed coercion is more likely to affect code "out there". Yet another argument is that one expects identical(as.complex(NA_real_), NA_real_ + (0+0i)) to be TRUE, i.e., that coercing from double to complex is equivalent to adding a complex zero. The new behaviour makes the above FALSE, since NA_real_ + (0+0i) gives complex(r=NA_real_, i=0). Having said that, one might also (but more naively) expect identical(as.complex(as.double(NA_complex_)), NA_complex_) to be TRUE. Under my proposal it continues to be FALSE. Well, I'd prefer if it gave FALSE with a warning "imaginary parts discarded in coercion", but it seems that as.double(complex(r=a, i=b)) never warns when either of 'a' and 'b' is NA_real_ or NaN, even where "information" {nonzero 'b'} is clearly lost ... Whatever decision is made about as.complex(NA_real_), maybe these points should be weighed before it becomes part of R-release ... Mikael ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel