From hp@ge@@on@g|thub @end|ng |rom gm@||@com  Tue Feb  6 20:17:20 2024
From: hp@ge@@on@g|thub @end|ng |rom gm@||@com (=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=)
Date: Tue, 6 Feb 2024 11:17:20 -0800
Subject: [Rd] NOTE: multiple local function definitions for ?fun? with
 different formal arguments
In-Reply-To: <5cb29a06-5b73-4fe4-b8dc-7aa9db6a2cff@gmail.com>
References: <5jst8ric3j9fg55fkwuhhlyk.1707061436584@email.android.com>
 <CA+jjkEbwGe-W-gSfds1=4Vzrf=LOitwiE=4Vx0+NCj4t2t09JA@mail.gmail.com>
 <lo01v1qa61gmseab9ma660ts.1707061568394@email.android.com>
 <5cb29a06-5b73-4fe4-b8dc-7aa9db6a2cff@gmail.com>
Message-ID: <15c10f0d-2c05-4b84-a3f0-0c02fdbb15e2@gmail.com>

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 at gmail.com>
>> Date: Sun, Feb 4, 2024, 10:44 AM
>> To: "Izmirlian, Grant (NIH/NCI) [E]" <izmirlig at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Herv? Pag?s

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

	[[alternative HTML version deleted]]



[Rd] NOTE: multiple local function definitions for ?fun? with different formal arguments
=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=