[R] OK, next Q - a sort of factorial on a vector

Philip Rhoades ph|| @end|ng |rom pr|com@com@@u
Tue Jun 20 20:52:23 CEST 2023


Eric,


On 2023-06-21 04:02, Eric Berger wrote:
> 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)]))


Amazing! - it reminds me of the old days when there were competitions to 
write the smallest C programs . .


> Enjoy your return to R!


Thanks! I think I was right to look at R first - it is exactly what I 
need I think - and the model I am thinking of shouldn't need any grunt 
that would require rewriting any functions in C or Rust or something . .

P.


> On Tue, Jun 20, 2023 at 8:46 PM Philip Rhoades via R-help
> <r-help using 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 using 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
>> [1](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 using pricom.com.au
>> 
>> ______________________________________________
>> R-help using 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.
> 
> 
> Links:
> ------
> [1] http://is.na

-- 
Philip Rhoades

PO Box 896
Cowra  NSW  2794
Australia
E-mail:  phil using pricom.com.au



More information about the R-help mailing list