On 07-02-2012, at 00:09, Rolf Turner wrote: > > 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).
You are completely correct. I should have checked more thoroughly. Using this dataframe makes the error glaring df <- data.frame(a=rep(2,10),b=rep(3,10),c=rep(4,10)) My apologies to the OP and the list. Berend Hasselman ______________________________________________ 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.