From: Robin Hankin <rksh1_at_cam.ac.uk>

Date: Fri, 30 Jul 2010 10:35:28 +0100

Date: Fri, 30 Jul 2010 10:35:28 +0100

Hello everybody

When one is working with complex matrices, "transpose" very nearly
always means

*Hermitian* transpose, that is, A[i,j] <- Conj(A[j,i]).
One often writes A^* for the Hermitian transpose.

I have only once seen a "real-life" case where transposition does not occur simultaneously with complex conjugation. And I'm not 100% sure that that wasn't a mistake.

Matlab and Octave sort of recognize this, as "A'" means the Hermitian transpose of "A".

In R, this issue makes t(), crossprod(), and tcrossprod() pretty much useless to me.

OK, so what to do? I have several options:

- define functions myt(), and mycrossprod() to get round the problem: myt <- function(x){t(Conj(x))}
- Try to redefine t.default():

t.default <- function(x){if(is.complex(x)){return(base::t(Conj(x)))}
else {return(base::t(x))}}

(This fails because of infinite recursion, but I don't quite understand

why).

3. Try to define a t.complex() function:
t.complex <- function(x){t(Conj(x))}

(also fails because of recursion)

4. Try a kludgy workaround:

t.complex <- function(x){t(Re(x)) - 1i*t(Im(x))}

Solution 1 is not good because it's easy to forget to use myt() rather
than t()

and it does not seem to be good OO practice.

As Martin Maechler points out, solution 2 (even if it worked as desired) would break the code of everyone who writes a myt() function.

Solution 3 fails and solution 4 is kludgy and inefficient.

Does anyone have any better ideas?

-- Robin K. S. Hankin Uncertainty Analyst University of Cambridge 19 Silver Street Cambridge CB3 9EP 01223-764877 ______________________________________________ R-devel_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-develReceived on Fri 30 Jul 2010 - 09:37:44 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Fri 30 Jul 2010 - 20:10:21 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel.
Please read the posting
guide before posting to the list.
*