logical condition in vector operation
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