Hi useRs, I ran into an inconsistent output problem again. Here is the simplify illustration I've got a matrix as follows > x V1 V2 V3 [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 Associated with the matrix is a scaling factor, sca, derived from, say the mean of the respective columns, V1-V3; > sca V1 V2 V3 2.5 1.7 3.6 The idea is that the scaling factor gets applied to each element in the column matrix. So > out <- x / sca would give me V1 V2 V3 1 *2.5 2 *1.7 3 *3.6 4 *2.5 5 *1.7 6 *3.6 7 *2.5 8 *1.7 9 *3.6 But what actually happen is this, V1 V2 V3 1 *2.5 2 *2.5 3 *2.5 4 *1.7 5 *1.7 6 *1.7 7 *3.6 8 *3.6 9 *3.6 I can do the following; < x[,1] / sca[1] < x[,2] / sca[2] which is OK for a set of test data but not for my actual dataset. At the moment, I'm thinking of something in the lines of a for loop function i.e. for (i in ...){ statement... } Is there a syntax in the for loop that allows me to select the column/row in the file? Thanks. -- Muhammad Rahiz | Doctoral Student in Regional Climate Modeling Climate Research Laboratory, School of Geography & the Environment Oxford University Centre for the Environment South Parks Road, Oxford, OX1 3QY, United Kingdom Tel: +44 (0)1865-285194 Mobile: +44 (0)7854-625974 Email: muhammad.rahiz at ouce.ox.ac.uk
If "out" is what you want to achieve, why don't you multiply "sca" (called "m" below) with the transpose of "x" and then transpose the resulting matrix? x=c(1,2,3,4,5,6,7,8,9) dim(x)=c(3,3) x=t(x) x m=c(2.5,1.7,3.6) x*m #returns what you don't want t(t(x)*m) #returns what you want HTH Daniel ------------------------- cuncta stricte discussurus ------------------------- -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Muhammad Rahiz Sent: Sunday, December 27, 2009 2:27 PM To: r-help at r-project.org Subject: [R] Scaling error Hi useRs, I ran into an inconsistent output problem again. Here is the simplify illustration I've got a matrix as follows > x V1 V2 V3 [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 Associated with the matrix is a scaling factor, sca, derived from, say the mean of the respective columns, V1-V3; > sca V1 V2 V3 2.5 1.7 3.6 The idea is that the scaling factor gets applied to each element in the column matrix. So > out <- x / sca would give me V1 V2 V3 1 *2.5 2 *1.7 3 *3.6 4 *2.5 5 *1.7 6 *3.6 7 *2.5 8 *1.7 9 *3.6 But what actually happen is this, V1 V2 V3 1 *2.5 2 *2.5 3 *2.5 4 *1.7 5 *1.7 6 *1.7 7 *3.6 8 *3.6 9 *3.6 I can do the following; < x[,1] / sca[1] < x[,2] / sca[2] which is OK for a set of test data but not for my actual dataset. At the moment, I'm thinking of something in the lines of a for loop function i.e. for (i in ...){ statement... } Is there a syntax in the for loop that allows me to select the column/row in the file? Thanks. -- Muhammad Rahiz | Doctoral Student in Regional Climate Modeling Climate Research Laboratory, School of Geography & the Environment Oxford University Centre for the Environment South Parks Road, Oxford, OX1 3QY, United Kingdom Tel: +44 (0)1865-285194 Mobile: +44 (0)7854-625974 Email: muhammad.rahiz at ouce.ox.ac.uk ______________________________________________ R-help at 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.
Hi, Try this, x <- matrix(1:9, ncol=3, byrow=T) sca <- c(2.5, 1.7, 3.6) x %*% diag(1/sca) HTH, baptiste 2009/12/27 Muhammad Rahiz <muhammad.rahiz at ouce.ox.ac.uk>:> Hi useRs, > > I ran into an inconsistent output problem again. Here is the simplify > illustration > > I've got a matrix as follows > >> x > ? ? ? V1 ? ?V2 ? V3 > [1,] ? 1 ? ? ?2 ? ? 3 > [2,] ? 4 ? ? ?5 ? ? 6 > [3,] ? 7 ? ? ?8 ? ? 9 > > Associated with the matrix is a scaling factor, sca, derived from, say the > mean of the respective columns, V1-V3; > >> sca > ? ? ? V1 ? ?V2 ? V3 > ? ? ? 2.5 ? 1.7 ? 3.6 > > The idea is that the scaling factor gets applied to each element in the > column matrix. So > >> out <- x / sca > > would give me > > V1 ? ? ? ? ? ?V2 ? ? ? ? ? ? V3 > 1 *2.5 ? ? ? 2 *1.7 ? ? ? 3 *3.6 > 4 *2.5 ? ? ? 5 *1.7 ? ? ? 6 *3.6 > 7 *2.5 ? ? ? 8 *1.7 ? ? ? 9 *3.6 > > But what actually happen is this, > > V1 ? ? ? ? ? ?V2 ? ? ? ? ? ? V3 > 1 *2.5 ? ? ? 2 *2.5 ? ? ? 3 *2.5 > 4 *1.7 ? ? ? 5 *1.7 ? ? ? 6 *1.7 > 7 *3.6 ? ? ? 8 *3.6 ? ? ? 9 *3.6 > > I can do the following; > > < x[,1] / sca[1] > < x[,2] / sca[2] > > which is OK for a set of test data but not for my actual dataset. > > At the moment, I'm thinking of something in the lines of a for loop function > i.e. > > for (i in ...){ > statement... > } > > Is there a syntax in the for loop that allows me to select the column/row in > the file? > > Thanks. > > -- > Muhammad Rahiz ?| ?Doctoral Student in Regional Climate Modeling > > Climate Research Laboratory, School of Geography & the Environment > Oxford University Centre for the Environment > South Parks Road, Oxford, OX1 3QY, United Kingdom Tel: +44 (0)1865-285194 > ?Mobile: +44 (0)7854-625974 > Email: muhammad.rahiz at ouce.ox.ac.uk > > ______________________________________________ > R-help at 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. >
sweep(x, 2, m, FUN='/') On Sun, Dec 27, 2009 at 2:26 PM, Muhammad Rahiz < muhammad.rahiz@ouce.ox.ac.uk> wrote:> Hi useRs, > > I ran into an inconsistent output problem again. Here is the simplify > illustration > > I've got a matrix as follows > > > x > V1 V2 V3 > [1,] 1 2 3 > [2,] 4 5 6 > [3,] 7 8 9 > > Associated with the matrix is a scaling factor, sca, derived from, say the > mean of the respective columns, V1-V3; > > > sca > V1 V2 V3 > 2.5 1.7 3.6 > > The idea is that the scaling factor gets applied to each element in the > column matrix. So > > > out <- x / sca > > would give me > > V1 V2 V3 > 1 *2.5 2 *1.7 3 *3.6 > 4 *2.5 5 *1.7 6 *3.6 > 7 *2.5 8 *1.7 9 *3.6 > > But what actually happen is this, > > V1 V2 V3 > 1 *2.5 2 *2.5 3 *2.5 > 4 *1.7 5 *1.7 6 *1.7 > 7 *3.6 8 *3.6 9 *3.6 > > I can do the following; > > < x[,1] / sca[1] > < x[,2] / sca[2] > > which is OK for a set of test data but not for my actual dataset. > > At the moment, I'm thinking of something in the lines of a for loop > function i.e. > > for (i in ...){ > statement... > } > > Is there a syntax in the for loop that allows me to select the column/row > in the file? > > Thanks. > > -- > Muhammad Rahiz | Doctoral Student in Regional Climate Modeling > > Climate Research Laboratory, School of Geography & the Environment > Oxford University Centre for the Environment > South Parks Road, Oxford, OX1 3QY, United Kingdom Tel: +44 (0)1865-285194 > Mobile: +44 (0)7854-625974 > Email: muhammad.rahiz@ouce.ox.ac.uk > > > ______________________________________________ > 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<http://www.r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve? [[alternative HTML version deleted]]