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.