Rune Schjellerup Philosof
2009-Jan-08 15:14 UTC
[R] NAs are not allowed in subscripted assignments
Browse[1]> j <- c(1,2,NA) Browse[1]> j[j==1][-1] [1] NA Browse[1]> j[j==1][-2] [1] 1 Browse[1]> j[j==1][-2] <- 2 Error during wrapup: NAs are not allowed in subscripted assignments As far as I can see, I have no NA in the lhs (not after the second subscript anyway). Besides, I have a single value on the rhs, so it should be allowed to have NAs in the lhs, according to help(Extract). What am I missing? I can see no ambiguite as to what the result of those commands should be (j == c(2,2,NA)). -- Med venlig hilsen Rune Schjellerup Philosof Videnskabelig Assistent, Statistik, SDU Telefon: 6550 3607 Email: rphilosof at health.sdu.dk Adresse: J.B. Winsl?wsvej 9, 5000 Odense C
Prof Brian Ripley
2009-Jan-08 17:19 UTC
[R] NAs are not allowed in subscripted assignments
On Thu, 8 Jan 2009, Rune Schjellerup Philosof wrote:> Browse[1]> j <- c(1,2,NA) > Browse[1]> j[j==1][-1] > [1] NA > Browse[1]> j[j==1][-2] > [1] 1 > Browse[1]> j[j==1][-2] <- 2 > Error during wrapup: NAs are not allowed in subscripted assignments > > As far as I can see, I have no NA in the lhs (not after the second > subscript anyway).But, it is not 'after the second subscript'. R evaluates from left to right and does not re-evaluate subscripts in the light of subexpressions. Think of this as (E&OE, since interpreters are far better at this than humans) ind <- j==1 # c(TRUE, FALSE, NA) tmp1 <- j[ind] # c(1, NA) tmp1[-2] <- 2 # tmp1 = c(2, 2) j[ind] <- tmp1 # j[(c(TRUE, FALSE, NA)] <- c(2,2) and that last is the problematic subassignment. You asked to assign the second '2' to an unknown element of 'j': if allowed that would make all elements NA but then the first value would be unused, so the interpreter would think you confused.> Besides, I have a single value on the rhs, so it should be allowed to > have NAs in the lhs, according to help(Extract).But you do not on one of your subassignments.> What am I missing? > I can see no ambiguite as to what the result of those commands should be > (j == c(2,2,NA)).I suggest you refrain from using such complicated statements. Just occasionally such constructs are needed for efficiency (potentially fewer copies) but very rarely (and only by R masters).> -- > Med venlig hilsen > Rune Schjellerup Philosof > Videnskabelig Assistent, Statistik, SDU > > Telefon: 6550 3607 > Email: rphilosof at health.sdu.dk > Adresse: J.B. Winsl?wsvej 9, 5000 Odense C-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595