[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