[Rd] stopifnot() does not stop at first non-TRUE argument

Hervé Pagès hpages at fredhutch.org
Tue May 16 01:57:05 CEST 2017


On 05/15/2017 07:28 AM, peter dalgaard wrote:
> I think Hervé's idea was just that if switch can evaluate arguments selectively, so can stopifnot().

Yep.

Thanks,
H.

> But switch() is .Primitive, so does it from C.
>
> 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:
>
> 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.
>

-- 
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



More information about the R-devel mailing list