[Rd] stopifnot() does not stop at first non-TRUE argument
Martin Maechler
maechler at stat.math.ethz.ch
Thu May 18 10:03:28 CEST 2017
>>>>> Suharto Anggono Suharto Anggono via R-devel <r-devel at r-project.org>
>>>>> on Tue, 16 May 2017 16:37:45 +0000 writes:
> switch(i, ...)
> extracts 'i'-th argument in '...'. It is like
> eval(as.name(paste0("..", i))) .
Yes, that's neat.
It is only almost the same: in the case of illegal 'i'
the switch() version returns
invisible(NULL)
whereas the version we'd want should signal an error, typically
the same error message as
> t2 <- function(...) ..2
> t2(1)
Error in t2(1) (from #1) : the ... list does not contain 2 elements
>
> Just mentioning other things:
> - For 'n',
> n <- nargs()
> can be used.
I know .. [in this case, where '...' is the only formal argument of the function]
> - sys.call() can be used in place of match.call() .
Hmm... in many cases, yes.... notably, as we do *not* want the
argument names here, I think you are right.
> ---------------------------
>>>>> 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://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list