[Rd] NOTE: multiple local function definitions for ?fun? with different formal arguments

Hervé Pagès hp@ge@@on@g|thub @end|ng |rom gm@||@com
Tue Feb 6 20:17:20 CET 2024


Thanks. Workarounds are interesting but... what's the point of the NOTE 
in the first place?

H.

On 2/4/24 09:07, Duncan Murdoch wrote:
> On 04/02/2024 10:55 a.m., Izmirlian, Grant (NIH/NCI) [E] via R-devel 
> wrote:
>> Well you can see that yeast is exactly weekday you have.  The way out 
>> is to just not name the result
>
> I think something happened to your explanation...
>
>>
>> toto <- function(mode)
>> {
>>      ifelse(mode == 1,
>>          function(a,b) a*b,
>>          function(u, v, w) (u + v) / w)
>> }
>
> It's a bad idea to use ifelse() when you really want if() ... else ... 
> .  In this case it works, but it doesn't always.  So the workaround 
> should be
>
>
> toto <- function(mode)
> {
>     if(mode == 1)
>         function(a,b) a*b
>     else
>         function(u, v, w) (u + v) / w
> }
>
>
>>
>>
>> ________________________________
>> From: Grant Izmirlian <izmirlidroid using gmail.com>
>> Date: Sun, Feb 4, 2024, 10:44 AM
>> To: "Izmirlian, Grant (NIH/NCI) [E]" <izmirlig using mail.nih.gov>
>> Subject: Fwd: [EXTERNAL] R-devel Digest, Vol 252, Issue 2
>>
>> Hi,
>>
>> I just ran into this 'R CMD check' NOTE for the first time:
>>
>> * checking R code for possible problems ... NOTE
>> toto: multiple local function definitions for �fun� with different
>>    formal arguments
>>
>> The "offending" code is something like this (simplified from the real 
>> code):
>>
>> toto <- function(mode)
>> {
>>      if (mode == 1)
>>          fun <- function(a, b) a*b
>>      else
>>          fun <- function(u, v, w) (u + v) / w
>>      fun
>> }
>>
>> Is that NOTE really intended? Hard to see why this code would be
>> considered "wrong".
>>
>> I know it's just a NOTE but still...
>
> I agree it's a false positive, but the issue is that you have a 
> function object in your function which can't be called 
> unconditionally.  The workaround doesn't create such an object.
>
> Recognizing that your function never tries to call fun requires global 
> inspection of toto(), and most of the checks are based on local 
> inspection.
>
> Duncan Murdoch
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Hervé Pagès

Bioconductor Core Team
hpages.on.github using gmail.com

	[[alternative HTML version deleted]]



More information about the R-devel mailing list