[R-pkg-devel] [External] Re: try() in R CMD check --as-cran

Tierney, Luke |uke-t|erney @end|ng |rom u|ow@@edu
Fri Jun 7 20:51:56 CEST 2019


A simplified version without a package:

Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_"="abort,verbose")
tryCatch(1:3 || 1, error = identity)

Running this aborts the session since it calls R_Suicide without first
signaling a condition to try any available handlers. Should be easy to
change, but I don't know if there are any downsides for the CRAN
workflow. I'll look into it.

Best,

luke


On Fri, 7 Jun 2019, William Dunlap wrote:

> I've attached a package, ppp_0.1.tar.gz, which probably will not get
> through to R-help, that illustrates this.
> It contains one function which, by default, triggers a condition-length>1
> issue:
>   f <- function(x = 1:3)
>   {
>       if (x > 1) {
>           x <- -x
>       }
>       stop("this function always gives an error")
>   }
> and the help file example is
>   try(f())
>
> Then
>   env _R_CHECK_LENGTH_1_CONDITION_=abort,verbose R-3.6.0 CMD check
> --as-cran ppp_0.1.tar.gz
> results in
> * checking examples ... ERROR
> Running examples in ‘ppp-Ex.R’ failed
> The error most likely occurred in:
>
>> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
>> ### Name: f
>> ### Title: Cause an error
>> ### Aliases: f
>> ### Keywords: error
>>
>> ### ** Examples
>>
>> try(f())
> ----------- FAILURE REPORT --------------
> --- failure: the condition has length > 1 ---
> --- srcref ---
> :
> --- package (from environment) ---
> ppp
> --- call from context ---
> f()
> --- call from argument ---
> if (x > 1) {
>    x <- -x
> }
> --- R stacktrace ---
> where 1: f()
> where 2: doTryCatch(return(expr), name, parentenv, handler)
> where 3: tryCatchOne(expr, names, parentenv, handlers[[1L]])
> where 4: tryCatchList(expr, classes, parentenv, handlers)
> where 5: tryCatch(expr, error = function(e) {
>    call <- conditionCall(e)
>    if (!is.null(call)) {
>        if (identical(call[[1L]], quote(doTryCatch)))
>            call <- sys.call(-4L)
>        dcall <- deparse(call)[1L]
>        prefix <- paste("Error in", dcall, ": ")
>        LONG <- 75L
>        sm <- strsplit(conditionMessage(e), "\n")[[1L]]
>        w <- 14L + nchar(dcall, type = "w") + nchar(sm[1L], type = "w")
>        if (is.na(w))
>            w <- 14L + nchar(dcall, type = "b") + nchar(sm[1L],
>                type = "b")
>        if (w > LONG)
>            prefix <- paste0(prefix, "\n  ")
>    }
>    else prefix <- "Error : "
>    msg <- paste0(prefix, conditionMessage(e), "\n")
>    .Internal(seterrmessage(msg[1L]))
>    if (!silent && isTRUE(getOption("show.error.messages"))) {
>        cat(msg, file = outFile)
>        .Internal(printDeferredWarnings())
>    }
>    invisible(structure(msg, class = "try-error", condition = e))
> })
> where 6: try(f())
>
> --- value of length: 3 type: logical ---
> [1] FALSE  TRUE  TRUE
> --- function from context ---
> function (x = 1:3)
> {
>    if (x > 1) {
>        x <- -x
>    }
>    stop("this function always gives an error")
> }
> <bytecode: 0x4f413d0>
> <environment: namespace:ppp>
> --- function search by body ---
> Function f in namespace ppp has this body.
> ----------- END OF FAILURE REPORT --------------
> Fatal error: the condition has length > 1
> * checking PDF version of manual ... OK
> * DONE
>
> Status: 1 ERROR, 1 NOTE
> See
>  ‘/tmp/bill/ppp.Rcheck/00check.log’
> for details.
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
>
> On Fri, Jun 7, 2019 at 10:21 AM Duncan Murdoch <murdoch.duncan using gmail.com>
> wrote:
>
>> On 07/06/2019 12:32 p.m., William Dunlap wrote:
>>> The length-condition-not-equal-to-one checks will cause R to shutdown
>>> even if the code in a tryCatch().
>>
>> That's strange.  I'm unable to reproduce it with my tries, and John's
>> package is no longer online.  Do you have an example I could look at?
>>
>> Duncan Murdoch
>>
>>>
>>> Bill Dunlap
>>> TIBCO Software
>>> wdunlap tibco.com <http://tibco.com>
>>>
>>>
>>> On Fri, Jun 7, 2019 at 7:47 AM Duncan Murdoch <murdoch.duncan using gmail.com
>>> <mailto:murdoch.duncan using gmail.com>> wrote:
>>>
>>>     On 07/06/2019 9:46 a.m., J C Nash wrote:
>>>     > Should try() not stop those checks from forcing an error?
>>>
>>>     try(stop("msg"))  will print the error message, but won't stop
>>>     execution.  Presumably the printed message is what is causing you
>>>     problems.  If you want to suppress that, use
>>>
>>>     try(stop("msg"), silent = TRUE)
>>>
>>>     Duncan Murdoch
>>>
>>>     >
>>>     > I recognize that this is the failure -- it is indeed the check
>>>     I'm trying to
>>>     > catch -- but I don't want tests of such checks to fail my package.
>>>     >
>>>     > JN
>>>     >
>>>     > On 2019-06-07 9:31 a.m., Sebastian Meyer wrote:
>>>     >> The failure stated in the R CMD check failure report is:
>>>     >>
>>>     >>>   --- failure: length > 1 in coercion to logical ---
>>>     >>
>>>     >> This comes from --as-cran performing useful extra checks via
>>>     setting the
>>>     >> environment variable _R_CHECK_LENGTH_1_LOGIC2_, which means:
>>>     >>
>>>     >>> check if either argument of the binary operators && and || has
>>>     length greater than one.
>>>     >>
>>>     >> (see
>>>     https://cran.r-project.org/doc/manuals/r-release/R-ints.html#Tools)
>>>     >>
>>>     >> The failure report also states the source of the failure:
>>>     >>
>>>     >>>   --- call from context ---
>>>     >>> fchk(x, benbad, trace = 3, y)
>>>     >>>   --- call from argument ---
>>>     >>> is.infinite(fval) || is.na <http://is.na>(fval)
>>>     >>
>>>     >> The problem is that both is.infinite(fval) and is.na
>>>     <http://is.na>(fval) return
>>>     >> vectors of length 10 in your test case:
>>>     >>
>>>     >>>   --- value of length: 10 type: logical ---
>>>     >>>   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>> FALSE
>>>     >>
>>>     >> The || operator works on length 1 Booleans. Since fval can be of
>>>     length
>>>     >> greater than 1 at that point, the proper condition seems to be:
>>>     >>
>>>     >> any(is.infinite(fval)) || any(is.na <http://is.na>(fval))
>>>     >>
>>>     >> Best regards,
>>>     >>
>>>     >>      Sebastian
>>>     >>
>>>     >>
>>>     >> Am 07.06.19 um 14:53 schrieb J C Nash:
>>>     >>> Sorry reply not quicker. For some reason I'm not getting
>>>     anything in the thread I started!
>>>     >>> I found the responses in the archives. Perhaps cc:
>>>     nashjc using uottawa.ca <mailto:nashjc using uottawa.ca> please.
>>>     >>>
>>>     >>> I have prepared a tiny (2.8K) package at
>>>     >>> http://web.ncf.ca/nashjc/jfiles/fchk_2019-6.5.tar.gz
>>>     >>>
>>>     >>> R CMD check --> OK
>>>     >>>
>>>     >>> R CMD check --as-cran --> 1 ERROR, 1 NOTE
>>>     >>>
>>>     >>> The error is in an example:
>>>     >>>
>>>     >>>> benbad<-function(x, y){
>>>     >>>>     # y may be provided with different structures
>>>     >>>>     f<-(x-y)^2
>>>     >>>> } # very simple, but ...
>>>     >>>>
>>>     >>>> y<-1:10
>>>     >>>> x<-c(1)
>>>     >>>> cat("test benbad() with y=1:10, x=c(1)\n")
>>>     >>>> tryfc01 <- try(fc01<-fchk(x, benbad, trace=3, y))
>>>     >>>> print(tryfc01)
>>>     >>>> print(fc01)
>>>     >>>
>>>     >>> There's quite a lot of output, but it doesn't make much sense
>>>     to me, as
>>>     >>> it refers to code that I didn't write.
>>>     >>>
>>>     >>> The function fchk is attempting to check if functions provided
>> for
>>>     >>> optimization do not violate some conditions e.g., character
>>>     rather than
>>>     >>> numeric etc.
>>>     >>>
>>>     >>> JN
>>>     >>>
>>>     >>>
>>>     >>> On 2019-06-07 8:44 a.m., J C Nash wrote:
>>>     >>>> Uwe Ligges ||gge@ @end|ng |rom @t using t|@t|k using tu-dortmund@de
>>>     >>>> Fri Jun 7 11:44:37 CEST 2019
>>>     >>>>
>>>     >>>>      Previous message (by thread): [R-pkg-devel] try() in R
>>>     CMD check --as-cran
>>>     >>>>      Next message (by thread): [R-pkg-devel] using package
>>>     data in package code
>>>     >>>>      Messages sorted by: [ date ] [ thread ] [ subject ] [
>>>     author ]
>>>     >>>>
>>>     >>>> Right, what problem are you talking about? Can you tell us
>>>     which check
>>>     >>>> it is and what it actually complained about.
>>>     >>>> There is no check that looks at the sizes of x and y in
>>>     exypressions
>>>     >>>> such as
>>>     >>>> (x - y)^2.
>>>     >>>> as far as I know.
>>>     >>>>
>>>     >>>> Best,
>>>     >>>> Uwe
>>>     >>>>
>>>     >>>> On 07.06.2019 10:33, Berry Boessenkool wrote:
>>>     >>>>>
>>>     >>>>> Not entirely sure if this is what you're looking for:
>>>     >>>>>
>>>
>> https://github.com/wch/r-source/blob/trunk/src/library/tools/R/check.R
>>>     >>>>> It does contain --as-cran a few times and there's the
>>>     change-history:
>>>     >>>>>
>>>
>> https://github.com/wch/r-source/commits/trunk/src/library/tools/R/check.R
>>>     >>>>>
>>>     >>>>> Regards,
>>>     >>>>> Berry
>>>     >>>>>
>>>     >>>>>
>>>     >>>>> ________________________________
>>>     >>>>> From: R-package-devel <r-package-devel-bounces using
>>>     r-project.org <http://r-project.org>> on behalf of J C Nash
>>>     <profjcnash using gmail.com <http://gmail.com>>
>>>     >>>>> Sent: Thursday, June 6, 2019 15:03
>>>     >>>>> To: List r-package-devel
>>>     >>>>> Subject: [R-pkg-devel] try() in R CMD check --as-cran
>>>     >>>>>
>>>     >>>>> After making a small fix to my optimx package, I ran my usual
>>>     R CMD check --as-cran.
>>>     >>>>>
>>>     >>>>> To my surprise, I got two ERRORs unrelated to the change. The
>>>     errors popped up in
>>>     >>>>> a routine designed to check the call to the user objective
>>>     function. In particular,
>>>     >>>>> one check is that the size of vectors is the same in
>>>     expressions like (x - y)^2.
>>>     >>>>> This works fine with R CMD check, but the --as-cran seems to
>>>     have changed and it
>>>     >>>>> pops an error, even when the call is inside try(). The irony
>>>     that the routine in
>>>     >>>>> question is intended to avoid problems like this is not lost
>>>     on me.
>>>     >>>>>
>>>     >>>>> I'm working on a small reproducible example, but it's not
>>>     small enough yet.
>>>     >>>>> In the meantime, I'm looking for the source codes of the
>>>     scripts for "R CMD check" and
>>>     >>>>> "R CMD check --as-cran" so I can work out why there is this
>>>     difference, which seems
>>>     >>>>> to be recent.
>>>     >>>>>
>>>     >>>>> Can someone send/post a link? I plan to figure this out and
>>>     provide feedback,
>>>     >>>>> as I suspect it is going to affect others. However, it may be
>>>     a few days or even
>>>     >>>>> weeks if past experience is a guide.
>>>     >>>>>
>>>     >>>>> JN
>>>     >>>>>
>>>     >>>>> ______________________________________________
>>>     >>>>> R-package-devel using r-project.org <http://r-project.org>
>>>     mailing list
>>>     >>>>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>     >>>>>
>>>     >>>>>   [[alternative HTML version deleted]]
>>>     >>>>>
>>>     >>>>> ______________________________________________
>>>     >>>>> R-package-devel using r-project.org <http://r-project.org>
>>>     mailing list
>>>     >>>>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>     >>>>>
>>>     >>>>
>>>     >>>
>>>     >>> ______________________________________________
>>>     >>> R-package-devel using r-project.org
>>>     <mailto:R-package-devel using r-project.org> mailing list
>>>     >>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>     >>>
>>>     >>
>>>     >> ______________________________________________
>>>     >> R-package-devel using r-project.org
>>>     <mailto:R-package-devel using r-project.org> mailing list
>>>     >> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>     >>
>>>     >
>>>     > ______________________________________________
>>>     > R-package-devel using r-project.org
>>>     <mailto:R-package-devel using r-project.org> mailing list
>>>     > https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>     >
>>>
>>>     ______________________________________________
>>>     R-package-devel using r-project.org <mailto:R-package-devel using r-project.org>
>>>     mailing list
>>>     https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>
>>
>>
>

-- 
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:   luke-tierney using uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu


More information about the R-package-devel mailing list