I believe your post is  misleading.  Your example "works"
purely by chance.

R uses "column ordering",  so entries 1 to 3 of column 1 in your
example get divided by 2, 3, and 4 respectively.  Then "scal" is
*recycled* and entries 4, 5, and 6, get divided by 2, 3, and 4
respectively, and so on.

It just *happens* that entry 4 of column 1 gets divided by 2,
entry 4 of column 2 gets divided by 3, and entry 4 of column 3
gets divided by 4, giving the impression that you are getting
what you want.  But if you look at row 5 of your "df" you'll see
something different.

# The same (due to serendipity --- or it's converse!):
> (df/scal)[4,]
                  a                  b                  c
4 0.0156342 0.03288247 0.02057588
> df[4,]/scal
                  a                  b                  c
4 0.0156342 0.03288247 0.02057588

# Not the same!
> (df/scal)[5,]
                  a                  b                  c
5 0.07904605 0.01585556 0.4562085
> df[5,]/scal
                  a                  b                  c
5 0.1185691 0.02114075 0.2281042

As has already been pointed out in this thread, to get what you think
you're getting, you need to use transpose t(t(df)/scal).

    cheers,

        Rolf Turner

On 07/02/12 08:54, Berend Hasselman wrote:
On 06-02-2012, at 20:22, Abhishek Pratap wrote:

Hey Guys

I want to divide(numerically) all the columns of a data frame by
different numbers. Here is what I am  doing but getting a weird error.
I don't think you are getting an error.
You are getting an unexpected result (you think).

The values in each column are not getting divided by the corresponding
value in the denominator vector instead by the alternative values. I
am sure I am messing up something.

Appreciate your help
-Abhi

head(counts)
               WT_CON WT_RB MU_CON MU_RB
row1       839   180    477   187


head(counts/c(2,3,4,5))
               WT_CON    WT_RB    MU_CON    MU_RB
row1      419.50000  45.0000  238.5000  46.7500
I tried this

df<- data.frame(a=runif(10),b=runif(10),c=runif(10))
scal<- c(2,3,4)

df
             a          b          c
1  0.47661685 0.73457617 0.90045279
2  0.06916502 0.76374600 0.07630196
3  0.17029174 0.29450289 0.07416969
4  0.03126839 0.09864740 0.08230353
5  0.23713816 0.06342224 0.91241698
6  0.21970595 0.86890690 0.47316101
7  0.46380324 0.26142304 0.87823277
8  0.81256517 0.76097474 0.98956553
9  0.74425369 0.29228545 0.27496707
10 0.65425285 0.40166967 0.12231213

df/scal
             a          b          c
1  0.23830843 0.24485872 0.22511320
2  0.02305501 0.19093650 0.03815098
3  0.04257293 0.14725144 0.02472323
4  0.01563419 0.03288247 0.02057588
5  0.07904605 0.01585556 0.45620849
6  0.05492649 0.43445345 0.15772034
7  0.23190162 0.08714101 0.21955819
8  0.27085506 0.19024369 0.49478276
9  0.18606342 0.14614273 0.09165569
10 0.32712642 0.13388989 0.03057803

Checking:
df[4,]/scal
            a          b          c
4 0.01563419 0.03288247 0.02057588


This is what you want guessing from your description.
You haven't given us an example with desired output.

Berend

______________________________________________
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.

Reply via email to