Russ Branaghan
2006-Apr-04 22:42 UTC
[R] Help on computing a matrix from another matrix in R
Hello All, I am new to R and am having a problem. I have the following 29 x 5 array called temp with a mode "list". Sincere Exciting Competent Sophisticated Rugged 3.5 2.5 3.8 3.5 3.0 2.0 2.5 3.5 2.5 2.3 2.8 3.0 2.3 1.5 1.8 2.0 4.0 2.8 1.5 4.5 2.5 1.5 1.8 1.3 1.3 4.0 2.0 3.0 2.3 2.5 3.0 1.8 3.0 3.0 2.0 1.7 1.7 1.3 1.0 1.3 2.7 2.3 1.5 1.3 1.8 2.8 1.0 3.5 4.0 1.8 3.3 1.5 3.0 2.3 1.5 2.3 1.3 1.3 1.0 1.0 2.0 1.3 1.0 1.3 1.0 3.0 2.0 2.0 2.3 1.3 2.5 1.5 2.0 1.0 1.5 2.5 1.3 2.8 2.8 1.5 2.3 1.5 1.5 1.3 1.3 2.0 2.3 2.3 1.8 2.8 2.0 3.3 3.0 2.3 3.8 2.8 3.8 4.0 2.3 4.8 2.8 3.8 3.0 2.3 4.3 2.5 2.0 3.0 2.8 2.0 2.3 3.0 1.8 1.5 2.0 3.0 3.3 3.3 2.8 2.3 3.5 2.8 3.3 1.8 2.0 5.0 1.5 1.5 1.3 1.3 2.7 1.7 1.5 1.3 1.5 1.8 1.3 1.3 1.0 1.0 2.8 4.5 3.8 3.0 4.0 I am trying to compute the similarity of each row with each other row by summing the absolute values of the differences between each item in each row with each item in each other row. So for example since row 1 is 3.5, 2.5, 3.8, 3.5, 3.0 and row 2 is 2.0, 2.5, 3.5, 2.5, and 2.3, the sum of the absolute values of the differences is 3.5. This is given by this code: sum(abs(temp[1,]-temp[2,])) My issue is that I want a 29 x 29 matrix of these similarity scores. I have made some progress, but I cannot quite get it. The closest code I have is the following (all on one line, of course): ans<- for (firstrow in 1:29) { for (escrow in 1:29) { print(sum(abs(temp[firstrow,] - temp[secrow,]) ) ) } } I realize that print is not the right function to be using, but at least it displays my results in a long list. Also, ans has the following characteristics:> ans[1]> dim(ans)NULL> mode(ans)1] "numeric" Can someone help me by telling me how to get this into a 29 x 29 matrix of the right mode? Thanks in advance, Russ
Berton Gunter
2006-Apr-04 23:11 UTC
[R] Help on computing a matrix from another matrix in R
temp is a data.frame, not an array. Have you read "An Introduction to R"? If not, please do so before posting. You might also save yourself a lot of time if you learned to use R's search facilties, (help.search(), RSiteSearch()). R is a mature product with an incredible amount of excellent code already available. These facilities help you to find out, though I admit it can be frustrating at times to get the right keyword. Don't neglect Google either. If I'm not mistaken, you are trying to redo what already has been done in the cluster package. library(cluster) ?dist where you want method='manhattan'. If so, you surely are wasting your time and producing poor code, as the c code will be orders of magnitude faster. -- Bert Gunter Genentech Non-Clinical Statistics South San Francisco, CA "The business of the statistician is to catalyze the scientific learning process." - George E. P. Box> -----Original Message----- > From: r-help-bounces at stat.math.ethz.ch > [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Russ Branaghan > Sent: Tuesday, April 04, 2006 3:42 PM > To: r-help at stat.math.ethz.ch > Subject: [R] Help on computing a matrix from another matrix in R > > Hello All, > > I am new to R and am having a problem. > > I have the following 29 x 5 array called temp with a mode "list". > > Sincere Exciting Competent Sophisticated Rugged > 3.5 2.5 3.8 3.5 3.0 > 2.0 2.5 3.5 2.5 2.3 > 2.8 3.0 2.3 1.5 1.8 > 2.0 4.0 2.8 1.5 4.5 > 2.5 1.5 1.8 1.3 1.3 > 4.0 2.0 3.0 2.3 2.5 > 3.0 1.8 3.0 3.0 2.0 > 1.7 1.7 1.3 1.0 1.3 > 2.7 2.3 1.5 1.3 1.8 > 2.8 1.0 3.5 4.0 1.8 > 3.3 1.5 3.0 2.3 1.5 > 2.3 1.3 1.3 1.0 1.0 > 2.0 1.3 1.0 1.3 1.0 > 3.0 2.0 2.0 2.3 1.3 > 2.5 1.5 2.0 1.0 1.5 > 2.5 1.3 2.8 2.8 1.5 > 2.3 1.5 1.5 1.3 1.3 > 2.0 2.3 2.3 1.8 2.8 > 2.0 3.3 3.0 2.3 3.8 > 2.8 3.8 4.0 2.3 4.8 > 2.8 3.8 3.0 2.3 4.3 > 2.5 2.0 3.0 2.8 2.0 > 2.3 3.0 1.8 1.5 2.0 > 3.0 3.3 3.3 2.8 2.3 > 3.5 2.8 3.3 1.8 2.0 > 5.0 1.5 1.5 1.3 1.3 > 2.7 1.7 1.5 1.3 1.5 > 1.8 1.3 1.3 1.0 1.0 > 2.8 4.5 3.8 3.0 4.0 > > I am trying to compute the similarity of each row with each > other row by > summing the absolute values of the differences between each > item in each row > with each item in each other row. So for example since row 1 > is 3.5, 2.5, > 3.8, 3.5, 3.0 and row 2 is 2.0, 2.5, 3.5, 2.5, and 2.3, the sum of the > absolute values of the differences is 3.5. This is given by this code: > > sum(abs(temp[1,]-temp[2,])) > > My issue is that I want a 29 x 29 matrix of these similarity > scores. I have > made some progress, but I cannot quite get it. The closest > code I have is > the following (all on one line, of course): > > ans<- for (firstrow in 1:29) { for (escrow in 1:29) { > print(sum(abs(temp[firstrow,] - temp[secrow,]) ) ) } } > > > I realize that print is not the right function to be using, > but at least it > displays my results in a long list. Also, ans has the following > characteristics: > > > ans > [1] > > > dim(ans) > NULL > > > mode(ans) > 1] "numeric" > > Can someone help me by telling me how to get this into a 29 x > 29 matrix of > the right mode? > > Thanks in advance, > > Russ > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html >