Thanks Dan. You did much more than just answer my question.
Sincerely, Dan Davison wrote: > > On Sun, Aug 10, 2008 at 06:00:21PM +0100, Dan Davison wrote: >> On Sun, Aug 10, 2008 at 09:02:59AM -0700, warthog29 wrote: >> > >> > Hi, >> > I would like to use the R's outer function on y below so that I can >> subtract >> > elements from each other. The resulting dataframe is symmetric, save >> for the >> ^^^^^^ >> outer() returns a matrix, not a data frame. >> >> > negative signs on the other half of the numbers. I would like to get >> only >> > half of the dataframe. Here is the code I wrote (it is returning only >> the >> > first line of the all elements I want. Please help). >> > y<-c(4,4,3.9,3.8,3.7,3.6,3.5,3.5,3.5,3.3,3.2,3.2) >> > >> > b<-outer(y,y,"-") >> >> > b<-as.matrix(by) >> >> I assume that line was supposed to be b<-as.matrix(by). In any case > > Hmm, I didn't really clarify things there. I meant > b<-as.matrix(b). But anyway, not needed. > >> you don't need it; b is a matrix already. >> >> > # I want to keep the elements: >> > #b[1,2:12], >> > #b[2,3:12], >> > #.........until >> > #b[11,12:12]. >> >> Use upper.tri() to get the upper-triangle: >> >> b[upper.tri(b, diag=FALSE)] >> [1] 0.0 0.1 0.1 0.2 0.2 0.1 0.3 0.3 0.2 0.1 0.4 0.4 0.3 0.2 0.1 0.5 0.5 >> 0.4 0.3 >> [20] 0.2 0.1 0.5 0.5 0.4 0.3 0.2 0.1 0.0 0.5 0.5 0.4 0.3 0.2 0.1 0.0 0.0 >> 0.7 0.7 >> [39] 0.6 0.5 0.4 0.3 0.2 0.2 0.2 0.8 0.8 0.7 0.6 0.5 0.4 0.3 0.3 0.3 0.1 >> 0.8 0.8 >> [58] 0.7 0.6 0.5 0.4 0.3 0.3 0.3 0.1 0.0 >> >> Or perhaps you want to knock out the negative entries, but still keep the >> matrix structure: >> >> b[lower.tri(b)] <- NA >> >> or perhaps you wanted >> >> b <- abs(outer(y,y,"-")) >> >> in the first place? >> >> > #Here is the function I wrote to get half of matrix: >> > >> > wk<-function(p){ >> > for (i in 2:p){ >> > ri<-b[i-1,i:p] >> > return(ri) >> > } >> > } >> > wk(12) >> > #[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.5 0.5 0.7 0.8 0.8 >> >> I think you were intending this function to be something like this >> >> wk<-function(p){ >> ri <- NULL >> for (i in 2:p){ >> ri<-c(ri, b[i-1,i:p]) >> } >> return(ri) >> } >> >> Note that this function will give a different result from upper.tri(), >> because you are concatenating elements in the *rows* of the matrix, >> whereas the way matrices are represented in R has consecutive elements >> running down the columns. I.e. look at >> >> > A <- matrix(nrow=2,ncol=2) >> > A >> [,1] [,2] >> [1,] NA NA >> [2,] NA NA >> > A[] <- 1:4 >> > A >> [,1] [,2] >> [1,] 1 3 >> [2,] 2 4 >> >> Dan >> >> > >> > As you can see, it is only returning the first line. I would like other >> > corresponding elements too, to be found in row 2 to 12. Thanks. >> > -- >> > View this message in context: >> http://www.nabble.com/help-using-outer-function-tp18914432p18914432.html >> > Sent from the R help mailing list archive at Nabble.com. >> > >> > ______________________________________________ >> > 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. > > ______________________________________________ > 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. > > -- View this message in context: http://www.nabble.com/help-using-outer-function-tp18914432p18915298.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ 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.