Martin Maechler wrote: > diag(x) preserves the storage mode of x for 'complex' and > 'double' precision, but converts integer and logicals to double :
Duncan Murdoch wrote: > I think the change to preserve integer makes sense, but preserving > logical does not. A diagonal matrix has zeros off the diagonal, and > they are not logical. Having diag() sometimes return a matrix with > FALSE off the diagonal just looks wrong. Making diag(1:10) return an integer matrix does make sense, but it could still be undesirable. Often, the user will have intended to get a real matrix, and will after another operation, but only after an unnecessary coercion is done. For example: x<-diag(1:10); x[1,2]<-2.0 I personally think keeping diag(1:10) integer is best, but I thought I'd point out the contrary argument. Having diag(rep(TRUE,10)) return a logical matrix with FALSE off the diagonal does not strike me as too odd. It makes sense if you think of (FALSE, TRUE) as forming a field under operations of sum=XOR and product=AND. And of course it will typically be converted to a 0/1 matrix later if that's what was actually intended. Radford Neal ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel