From Kurt@Horn|k @end|ng |rom wu@@c@@t  Thu Sep  9 15:24:02 2021
From: Kurt@Horn|k @end|ng |rom wu@@c@@t (Kurt Hornik)
Date: Thu, 9 Sep 2021 15:24:02 +0200
Subject: [Rd] Should Position() use match.fun()?
In-Reply-To: <24889.46700.99366.498401@hornik.net>
References: <CAP=dwz9FY4j77S0Qm+grtX+S=Hjud6UF5+csewX6J4mG2HUHnQ@mail.gmail.com>
 <24889.46700.99366.498401@hornik.net>
Message-ID: <24890.2802.938653.54969@hornik.net>

>>>>> Kurt Hornik writes:

>>>>> Steve Martin writes:
>> Hello,
>> All of the funprog functions except Position() use match.fun() early
>> in the body of the function. (Filter() seems to rely on lapply() for
>> this, but the effect is the same.) 

> Right. 

>> In most cases this isn't a problem, but I can't see why Position()
>> shouldn't look something like

>> Position2 <- function(f, x, right = FALSE, nomatch = NA_integer_) {
>> f <- match.fun(f) # the only difference from Position()
>> ind <- if (right) rev(seq_along(x)) else seq_along(x)
>> for (i in ind) {
>> if (f(x[[i]])) return(i)
>> }
>> nomatch
>> }

>> This would make it consistent with the other funprog functions, and
>> would mean that Find() and Position() give the same result when
>> expected

> Indeed.  I'll look into adding the match.fun ...

Changed now with c80873.

Best
-k

> Best
> -k

>>> equals3 <- function(x) x == 3
>>> Position("equals3", 1:5)
>> Error in f(x[[i]]) : could not find function "f"
>>> Position2("equals3", 1:5)
>> [1] 3
>>> Find("equals3", 1:5)
>> [1] 3

>> Thanks,
>> Steve

>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel

> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



[Rd] Should Position() use match.fun()?
Kurt Hornik