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]]
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_pannas at 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]] >
Hi Please be more specific and try to post some example to simplify elaborating answer. How big is your matrix. Double loop seems to be the first which come to my mind however it can be unpractical when dealing with big matrix or if you want to do this task repeatedly. Petr> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- > project.org] On Behalf Of anna pannas > Sent: Wednesday, August 27, 2014 5:55 AM > To: r-help at r-project.org > Subject: [R] working with matrices > > 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]]________________________________ Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou ur?eny pouze jeho adres?t?m. Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav? neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie vyma?te ze sv?ho syst?mu. Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat. Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi ?i zpo?d?n?m p?enosu e-mailu. V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?: - vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en? smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu. - a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout; Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany p??jemce s dodatkem ?i odchylkou. - trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech. - odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto emailu p??padn? osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich existence je adres?tovi ?i osob? j?m zastoupen? zn?m?. This e-mail and any documents attached to it may be confidential and are intended only for its intended recipients. If you received this e-mail by mistake, please immediately inform its sender. Delete the contents of this e-mail with all attachments and its copies from your system. If you are not the intended recipient of this e-mail, you are not authorized to use, disseminate, copy or disclose this e-mail in any manner. The sender of this e-mail shall not be liable for any possible damage caused by modifications of the e-mail or by delay with transfer of the email. In case that this e-mail forms part of business dealings: - the sender reserves the right to end negotiations about entering into a contract in any time, for any reason, and without stating any reasoning. - if the e-mail contains an offer, the recipient is entitled to immediately accept such offer; The sender of this e-mail (offer) excludes any acceptance of the offer on the part of the recipient containing any amendment or variation. - the sender insists on that the respective contract is concluded only upon an express mutual agreement on all its aspects. - the sender of this e-mail informs that he/she is not authorized to enter into any contracts on behalf of the company except for cases in which he/she is expressly authorized to do so in writing, and such authorization or power of attorney is submitted to the recipient or the person represented by the recipient, or the existence of such authorization is known to the recipient of the person represented by the recipient.