Gabor Grothendieck <ggrothendieck <at> myway.com> writes: : : Adaikalavan Ramasamy <ramasamy <at> cancer.org.uk> writes: : : : : : Thank you to Marc Schwartz and Gabor Grothendieck for their responses. : : Both solutions are useful. : : : : It would be nice to generalise this problem to situations where other : : operations besides difference. Maybe a new member of apply family - : : pwapply for pairwise apply ? : : : : Of course the output would be different if the results of an operation : : on two columns produce a vector (like pairwise difference here) or a : : single value (like in correlation or pairwise t-test) and one need to : : somehow account for this. : : Since the general case would involve columns or array slices between : two not necessarily identical arrays I think the general case is really : just a sort of generalized inner product. : : In the case that the generalized difference is a scalar its usually called : a product and the Euclidean inner product is the most common and takes : the form of matrix multiplication which can be done in the one of : the following ways: : : res1 <- t(mat) %*% mat : res2 <- crossprod(mat, mat) : res3 <- crossprod(mat) : : A generalized inner product, f, replacing the Euclidean one can be : obtained using a double apply like this: : : res4 <- apply(mat, 2, function(a) apply(mat, 2, function(b) sum(a*b))) : : where sum(a*b) can be replaced by f(a,b) for a general inner product : function. This actually works even if f returns a vector or other : array; however, you may need to reshape the result in that case. : : In the above cases the two matrices were the same but, as mentioned, : they need not be and you can't count on symmetry between f(a,b) and : f(b,a). If your two matrices are the saame and you can count on : symmetry then you may want only the lower triangular part and in : that case you can use lower.tri like this: : : res4[lower.tri(res4)]
In rereading what I had written it occurred to me that you also may be interested in ?dist and the references therein for a number of special cases and for converting matrices to dist objects. Also see ?var ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html