Hi Philip,
In the decades since you learned R there have been some additions to the
language.
In particular, R now supports lambda functions.
Applying this feature to Ivan's beautiful solution cuts down 7 characters
(continuing his golfing analogy)
unlist(lapply(seq_along(x), \(i) x[i] * x[-(1:i)]))
Enjoy your return to R!
On Tue, Jun 20, 2023 at 8:46?PM Philip Rhoades via R-help <
r-help at r-project.org> wrote:
> Ivan,
>
>
> On 2023-06-21 03:32, Ivan Krylov wrote:
> > ? Wed, 21 Jun 2023 03:13:52 +1000
> > Philip Rhoades via R-help <r-help at r-project.org> ?????:
> >
> >> This:
> >>
> >> !(1,2,3,4,5)
> >>
> >> would give this:
> >>
> >> (2,3,4,5, 6,8,10, 12,15, 20)
> >
> > Do you mean taking a product of every element of the vector with all
> > following vector elements? A relatively straightforward way would be
> > (given your vector stored in `x`):
> >
> > unlist(lapply(seq_along(x), function(i) x[i] * x[-(1:i)]))
>
>
> Perfect!
>
>
> > (I'm sure it could be golfed further.)
>
>
> I will look at Sarah's suggestion too.
>
>
> >> and this:
> >>
> >> !(1,2,NA,4,5)
> >>
> >> would give this:
> >>
> >> (2,4,5, 8,10, 20)
> >
> > The previous solution seems to give your vector interspersed a bunch
of
> > NAs, so one way to continue would be to filter it using v[!is.na(v)].
>
>
> Exactly!
>
> Thanks people - it would have taken forever to work that out myself (it
> has been decades since I looked at R).
>
> Phil.
> --
> Philip Rhoades
>
> PO Box 896
> Cowra NSW 2794
> Australia
> E-mail: phil at pricom.com.au
>
> ______________________________________________
> R-help at 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]]