Odd behaviour of R 2.00
Dear Professor Ripley and Professor Dalgaard Thank you for your quick reply. Now, I understand. Thank you. -------------------------------- Hiroto Miyoshi h_m_ at po.harenet.ne.jp ----- Original Message ----- From: "Prof Brian Ripley" <ripley at stats.ox.ac.uk> To: "Hiroto Miyoshi" <h_m_ at po.harenet.ne.jp> Cc: "Peter Dalgaard" <p.dalgaard at biostat.ku.dk>; <r-help at stat.math.ethz.ch> Sent: Sunday, November 14, 2004 9:27 PM Subject: Re: [R] Odd behaviour of R 2.00
On Sun, 14 Nov 2004, Hiroto Miyoshi wrote:
Dear Professor Dalgaard
It is the NA pattern on the left hand side that matters. Does it help to use seishin[!is.na(seishin) & seishin==""]<-NA ?
Yes! the above line worked perfectly. But why? To me, !is.na(seishin) & seishin=="" seems redundant. If you could explain this, it would be greatly appreciated.
Without it, your logical matrix index contains NA. What do you intend that to do? Do you replace the corresponding element or not? You don't know, so perhaps you set it to NA, whatever the rhs? And do you use up a value on the rhs or not (not relevant if as here you are recycling a single value, except that you need to know how many times to recycle it)? Prior to 2.0.0, R behaved inconsistently (both within itself and with S) with NA indices in assignments, so now we force the user to say what he intended. This has picked up quite a number of errors. I do think this would be cleaner and faster using a loop over columns, especially as you probably have factors in the data frame. Read the code of "[<-.data.frame" if you don't see that.
Thank you. -------------------------------- Hiroto Miyoshi h_m_ at po.harenet.ne.jp
-------------------------------- Hiroto Miyoshi h_m_ at po.harenet.ne.jp ----- Original Message ----- From: "Peter Dalgaard" <p.dalgaard at biostat.ku.dk> To: "Hiroto Miyoshi" <h_m_ at po.harenet.ne.jp> Cc: "Peter Dalgaard" <p.dalgaard at biostat.ku.dk>; <r-help at hypatia.math.ethz.ch> Sent: Sunday, November 14, 2004 9:27 PM Subject: Re: [R] Odd behaviour of R 2.00
"Hiroto Miyoshi" <h_m_ at po.harenet.ne.jp> writes:
Dear Professor Dalgaard
It is the NA pattern on the left hand side that matters. Does it help to use seishin[!is.na(seishin) & seishin==""]<-NA ?
Yes! the above line worked perfectly. But why? To me, !is.na(seishin) & seishin=="" seems redundant. If you could explain this, it would be greatly appreciated. Thank you.
It's due to this change (do check the NEWS file when things change
unexpectedly...):
o Subassignments involving NAs and with a replacement value of
length > 1 are now disallowed. (They were handled
inconsistently in R < 2.0.0, see PR#7210.) For data frames
they are disallowed altogether, even for logical matrix indices
(the only case which used to work).
Now, I'm getting slightly confused here, since there appears to be
exceptions:
str(c)
`data.frame': 10 obs. of 2 variables: $ a: Factor w/ 10 levels "1","10","2","3",..: 1 3 4 5 6 NA 8 9 10 2 $ b: Factor w/ 9 levels "","a","b","e",..: 2 3 1 NA 4 5 6 7 8 9
c[c==""]<-NA str(c)
`data.frame': 10 obs. of 2 variables: $ a: Factor w/ 10 levels "1","10","2","3",..: 1 3 4 5 6 NA 8 9 10 2 $ b: Factor w/ 9 levels "","a","b","e",..: 2 3 NA NA 4 5 6 7 8 9
version
_ platform i686-pc-linux-gnu arch i686 os linux-gnu system i686, linux-gnu status major 2 minor 0.0 year 2004 month 10 day 04 language R Also:
aq <- airquality aq[aq==5] <- 98765432 aq[aq==97] <- 98765432
Error: NAs are not allowed in subscripted assignments (difference being that 97 occurs in columns with NA's and 5 does not) -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
----- Original Message ----- From: "Peter Dalgaard" <p.dalgaard at biostat.ku.dk> To: "Hiroto Miyoshi" <h_m_ at po.harenet.ne.jp> Cc: <r-help at stat.math.ethz.ch> Sent: Sunday, November 14, 2004 7:26 PM Subject: Re: [R] Odd behaviour of R 2.00
"Hiroto Miyoshi" <h_m_ at po.harenet.ne.jp> writes:
Dear R users I have a data frame containing character and numeric variables, whose name is seishin. When I tried to assign NA to "" in the data frame,
R,
2.00
showed an error message, such as
seishin[seishin==""]<-NA
Error: NAs are not allowed in subscripted assignments This did not happen under R 1.9.0. More oddly, The following commands work just fine under R 2.0.0
a<-1:10 b<-letters[1:10] b[3]<-"" c<-data.frame(cbind(a,b)) c[c==""]<-NA
Why is this so?
(For atomic vectors you could also use %in% instead of ==, but this doesn't work with data frames.)
And how can I assign NA to "" data.framewise in seishin data.frame?
-- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html ______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html
-- 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