Dear anna,

Unless the original matrix has a massive number of columns, why not just use 
loops? R programmers often have an unnecessary phobia of loops, and will puzzle 
over a programming problem for hours that can be solved by loops in seconds.

You don't say what specifically you want to do, but, for example:

> f <- function(X){
+   nc <- ncol(X)
+   Y <- matrix(0, nc, nc)
+   for (i in 1:(nc - 1)){
+     for (j in (i+1):nc){
+       Y[i, j] <- sum(X[, i] * X[, j])
+     }
+   }
+   return(Y)
+ }
> 

> (A <- matrix(1:12, 4, 3))
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12

> f(A)
     [,1] [,2] [,3]
[1,]    0   70  110
[2,]    0    0  278
[3,]    0    0    0

The example is artificial, since it just computes part of the matrix product,

> upper.tri(diag(3)) * (t(A) %*% A)
     [,1] [,2] [,3]
[1,]    0   70  110
[2,]    0    0  278
[3,]    0    0    0
>

but it has the structure that you outlined (if I understand it correctly).

For a moderate number of columns (you don't say how many you have), the 
computation isn't prohibitively slow:

> B <- matrix(rnorm(1e5), 100, 1000)
> system.time(f(B))
   user  system elapsed 
   4.12    0.01    4.15 

I hope this helps,
 John

------------------------------------------------
John Fox, Professor
McMaster University
Hamilton, Ontario, Canada
http://socserv.mcmaster.ca/jfox/
        
On Wed, 27 Aug 2014 04:54:44 +0100
 anna pannas <anna_pan...@yahoo.co.uk> wrote:
> hello
> 
> i want to fill a matrix by its upper off diagonal elements
> 
> specifically I want to take the first and second column of  the matrix and I 
> apply a function to then that returns a single number which I want to place 
> in the (1,2) entry of the matrix, then I want to take the first and third 
> column of the matrix and apply the same function, get the single number and 
> place it to (2,3) entry of the matrix and so on
> 
> how can i do it?
> 
> thanks
> anna
> 
>       [[alternative HTML version deleted]]
>

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to