Izmirlian, Grant (NIH/NCI) [E]
2024-Feb-04 15:55 UTC
[Rd] NOTE: multiple local function definitions for ?fun? with different formal arguments
Well you can see that yeast is exactly weekday you have. The way out is to just
not name the result
toto <- function(mode)
{
ifelse(mode == 1,
function(a,b) a*b,
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...
Thanks,
H.
--
Herv? Pag?s
Bioconductor Core Team
hpages.on.github at gmail.com<mailto:hpages.on.github at gmail.com>
CAUTION: This email originated from outside of the organization. Do not click
links or open attachments unless you recognize the sender and are confident the
content is safe.
[[alternative HTML version deleted]]
Duncan Murdoch
2024-Feb-04 17:07 UTC
[Rd] NOTE: multiple local function definitions for ?fun? with different formal arguments
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 resultI 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
Apparently Analagous Threads
- [EXTERNAL] Re: NOTE: multiple local function definitions for ?fun? with different formal arguments
- NOTE: multiple local function definitions for ?fun? with different formal arguments
- [EXTERNAL] Re: NOTE: multiple local function definitions for ?fun? with different formal arguments
- NOTE: multiple local function definitions for ?fun? with different formal arguments
- [EXTERNAL] Re: NOTE: multiple local function definitions for ?fun? with different formal arguments