[R] Adding elements in an array where I have missing data.

Gabor Grothendieck ggrothendieck at gmail.com
Tue May 2 20:13:33 CEST 2006


But the evalq solution does change a.

> a <- c(2, NA, 3)
> b <- c(3,4, 5)
> evalq({a[is.na(a)]<-0;a})+b
[1] 5 4 8
> a
[1] 2 0 3

If evalq were changed to local then it would not change a:

> a <- c(2, NA, 3)
> b <- c(3,4, 5)
> local({a[is.na(a)]<-0;a})+b
[1] 5 4 8
> a
[1]  2 NA  3

Also the replace, ifelse and mapply solutions do not change a.


On 5/2/06, Berton Gunter <gunter.berton at gene.com> wrote:
> Below.
>
> > -----Original Message-----
> > From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com]
> > Sent: Tuesday, May 02, 2006 10:42 AM
> > To: Berton Gunter
> > Cc: John Kane; R R-help
> > Subject: Re: [R] Adding elements in an array where I have
> > missing data.
> >
> > On 5/2/06, Berton Gunter <gunter.berton at gene.com> wrote:
> > > >
> > > > Here are a few alternatives:
> > > >
> > > > replace(a, is.na(a), 0) + b
> > > >
> > > > ifelse(is.na(a), 0, a) + b
> > > >
> > > > mapply(sum, a, b, MoreArgs = list(na.rm = TRUE))
> > > >
> > >
> > > Well, Gabor, if you want to get fancy...
> > >
> > > evalq({a[is.na(a)]<-0;a})+b
> > >
> >
> > Note that the evalq can be omitted:
> >
> >    { a[is.na] <- 0; a } + b
> >
>
> No it can't. The idea is **not** to change the original a.
>
> -- Bert
>
>




More information about the R-help mailing list