"Wilkinson, Mark" <[EMAIL PROTECTED]> writes:
> I want to compute the lower triangle of a square matrix (optionally, sans
> diagonal). With for() loops I can do something like this:
>
> ## 5 by 5 matrix rtn
> for (j in 1:5) {
> for (k in 1:j) {
> if (j != k) { ## optional
> rtn[j, k] <- my.func(j, k)
> }
> }
> }
>
>
> I'd like to do this with apply(). Is there some way I can do this kind of
> 'short-circuit'?
It depends. If you can easily calculate a vector of values of
my.func(j,k) in the order in which the elements of the lower triangle
are stored you can do the assignment as
rtn[lower.tri(rtn)] <- vals
or
rtn[lower.tri(rtn, diag = TRUE)] <- vals
If you need to go through something like a double loop to calculate
the new values then this form of the replacement won't provide much of
an advantage.
See ?lower.tri and the lower.tri function itself.
______________________________________________
[EMAIL PROTECTED] mailing list
http://www.stat.math.ethz.ch/mailman/listinfo/r-help