[R] logical condition in vector operation
Federico Calboli
f.calboli at imperial.ac.uk
Thu Feb 9 11:20:46 CET 2006
On Thu, 2006-02-09 at 09:22 +0100, Christoph Buser wrote:
> Dear Frederico
>
> From your example it is not clear to me what you like to obtain:
> Please have a look on the slightly changed example here (I
> changed two values to show a potentially undesired side effect of
> your coding.
>
>
> test <- data.frame(rbind(c(3,3,10,21,0), c(2,3,11,12,0), c(3,4,12,23,0),
> c(3,5,13,24,0)))
> names(test) <- c("x","y","p","d","su")
> test
>
> >> x y p d su
> >> 1 3 3 10 21 0
> >> 2 2 3 11 12 0
> >> 3 3 4 12 23 0
> >> 4 3 5 13 24 0
>
> j <- 3
> test[test[,1] == j, 5] <- test[test[,1] == j,2] + test[test[,2] == j,1]
>
> >> > > Warning message:
> >> longer object length
> >> is not a multiple of shorter object length in:
> >> test[test[, 1] == j, 2] + test[test[, 2] == j, 1]
>
> Your code example produces now a warning for the adapted
> data frame "test", since one tries to add two vectors of length 2
> and 3, respectively. The result is based on recycling of the
> smaller vector. In your example there was no warning since the
> second column had only one entry.
> The result with the adapted data frame is:
>
> test
> >> x y p d su
> >> 1 3 3 10 21 6
> >> 2 2 3 11 12 0
> >> 3 3 4 12 23 6
> >> 4 3 5 13 24 8
>
> Is that kind of recycling desired in your application. Otherwise
> you should be careful with the coding example above.
Recycling was and is integral part of my plan.
Cheers,
Federico
--
Federico C. F. Calboli
Department of Epidemiology and Public Health
Imperial College, St Mary's Campus
Norfolk Place, London W2 1PG
Tel +44 (0)20 7594 1602 Fax (+44) 020 7594 3193
f.calboli [.a.t] imperial.ac.uk
f.calboli [.a.t] gmail.com
More information about the R-help
mailing list