From hpages at fredhutch.org  Tue May 16 20:26:28 2017
From: hpages at fredhutch.org (=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=)
Date: Tue, 16 May 2017 11:26:28 -0700
Subject: [Rd] stopifnot() does not stop at first non-TRUE argument
In-Reply-To: <10E55245-5B37-48FC-A3D0-0B87979DD5D1@gmail.com>
References: <1034131318.560887.1494952665524.ref@mail.yahoo.com>
 <1034131318.560887.1494952665524@mail.yahoo.com>
 <10E55245-5B37-48FC-A3D0-0B87979DD5D1@gmail.com>
Message-ID: <610e50b4-e38e-3339-24f0-91e726c26b4f@fredhutch.org>

On 05/16/2017 09:59 AM, peter dalgaard wrote:
>
>> On 16 May 2017, at 18:37 , Suharto Anggono Suharto Anggono via R-devel <r-devel at r-project.org> wrote:
>>
>> switch(i, ...)
>> extracts 'i'-th argument in '...'. It is like
>> eval(as.name(paste0("..", i))) .
>
> Hey, that's pretty neat!

Indeed! Seems like this topic is even more connected to switch()
than I anticipated...

H.

>
> -pd
>
>>
>> Just mentioning other things:
>> - For 'n',
>> n <- nargs()
>> can be used.
>> - sys.call() can be used in place of match.call() .
>> ---------------------------
>>>>>>> peter dalgaard <pdalgd at gmail.com>
>>>>>>>    on Mon, 15 May 2017 16:28:42 +0200 writes:
>>
>>> I think Herv?'s idea was just that if switch can evaluate arguments selectively, so can stopifnot(). But switch() is .Primitive, so does it from C.
>>
>> if he just meant that, then "yes, of course" (but not so interesting).
>>
>>> I think it is almost a no-brainer to implement a sequential stopifnot if dropping to C code is allowed. In R it gets trickier, but how about this:
>>
>> Something like this, yes, that's close to what Serguei Sokol had proposed
>> (and of course I *do*  want to keep the current sophistication
>> of stopifnot(), so this is really too simple)
>>
>>> Stopifnot <- function(...)
>>> {
>>> n <- length(match.call()) - 1
>>> for (i in 1:n)
>>> {
>>> nm <- as.name(paste0("..",i))
>>> if (!eval(nm)) stop("not all true")
>>> }
>>> }
>>> Stopifnot(2+2==4)
>>> Stopifnot(2+2==5, print("Hey!!!") == "Hey!!!")
>>> Stopifnot(2+2==4, print("Hey!!!") == "Hey!!!")
>>> Stopifnot(T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,F,T)
>>
>>
>>>> On 15 May 2017, at 15:37 , Martin Maechler <maechler at stat.math.ethz.ch> wrote:
>>>>
>>>> I'm still curious about Herv?'s idea on using  switch()  for the
>>>> issue.
>>
>>> --
>>> Peter Dalgaard, Professor,
>>> Center for Statistics, Copenhagen Business School
>>> Solbjerg Plads 3, 2000 Frederiksberg, Denmark
>>> Phone: (+45)38153501
>>> Office: A 4.23
>>> Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwIGaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=mLJLORFCunDiCafHllurGVVVHiMf85ExkM7B5DngfIk&s=helOsmplADBmY6Ct7r30onNuD8a6GKz6yuSgjPxljeU&e=
>

-- 
Herv? Pag?s

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages at fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



[Rd] stopifnot() does not stop at first non-TRUE argument
=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=