[R] sweep() and recycling
Robin Hankin
r.hankin at noc.soton.ac.uk
Mon Jun 20 11:32:44 CEST 2005
Hi
I had a hard-to-find bug in some of my code the other day, which I
eventually
traced to my misusing of sweep().
I would expect sweep() to give
me a warning if the elements don't recycle nicely, but
X <- matrix(1:36,6,6)
sweep(X,1,1:5,"+")
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 2 9 16 23 30 32
[2,] 4 11 18 25 27 34
[3,] 6 13 20 22 29 36
[4,] 8 15 17 24 31 38
[5,] 10 12 19 26 33 40
[6,] 7 14 21 28 35 37
gives no warning, even though (5,36)=1.
Also,
sweep(X,1,c(1,1000),"+")
and
sweep(X,2,c(1,1000),"+")
behave as expected, But
sweep(X,1,1:5,"+")
and
sweep(X,2,1:5,"+")
are identical!
I find this confusing, because I interpret sweep()'s second
argument as the margin along which the third argument is fourth
argumented
this interpretation breaks down in a non-obvious way if elements
are left over after recycling.
If sweep() had given a warning, I would have found my mistake much
faster.
Could we make sweep() issue a warning
under these circumstances or, failing that, add a warning to sweep.Rd
saying
that no warning is given in cases like this?
--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
tel 023-8059-7743
More information about the R-help
mailing list