I'm sorry, but  this is a good example of how one should *not* do this in
R. I also should apologize for any pedantry that follows, but I believe
this serves as a nice example of the ideas.

Two of R's central features as a "data science" language are that many of
its core capabilities are "vectorized" -- can calculate on whole objects
(at the user-visible interpreter level) rather than requiring explicit
loops; and that it can use object indexing in several different modalities,
here logical indexing, for extraction and replacement in whole objects such
as vectors and matrices. Not only does this typically yield simpler, more
readable code (admittedly, a subjective judgment), but it is also typically
much faster, though I grant you that this can often be overrated.

In this instance, the several lines of looping code you presented can be
condensed into a single line:

> span <- 1:20
> span[span %% 2 == 1]
 [1]  1  3  5  7  9 11 13 15 17 19

### Trickier, but perhaps instructive, is: ###
> span[TRUE & span %% 2]
 [1]  1  3  5  7  9 11 13 15 17 19

All languages trade off various strengths and weaknesses, but I think it's
fair to say that one should try to work within the paradigms that are the
language's strengths when possible, R's vectorization and indexing in this
example.

Cheers,
Bert Gunter

"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Sat, Jun 5, 2021 at 11:05 AM William Michels via R-help <
r-help@r-project.org> wrote:

> > i <- 1L; span <- 1:100; result <- NA;
> > for (i in span){
> + ifelse(i %% 2 != 0, result[i] <- TRUE, result[i] <- FALSE)
> + }
> > span[result]
>  [1]  1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43
> 45 47 49 51 53 55 57
> [30] 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
> >
>
> HTH, Bill.
>
> W. Michels, Ph.D.
>
>
> On Sat, Jun 5, 2021 at 12:55 AM Stefan Evert <stefa...@collocations.de>
> wrote:
> >
> > >
> > > I don't understand. --
> > >
> > > 7%%2=1
> > > 9%%2=1
> > > 11%%2=1
> > >
> > > What aren't these numbers printing ?
> > >
> > > num<-0
> > > for (i in 1:100){
> > >  num<-num+i
> > > if (num%%2 != 0)
> > >  print(num)
> > > }
> >
> > Your code tests the numbers
> >
> >         1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, …
> >
> > and correctly prints the odd ones among them.
> >
> > But I suppose that's not what you wanted to do?
> >
> > ______________________________________________
> > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to