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

William Dunlap wdun|@p @end|ng |rom t|bco@com
Fri Jun 7 19:53:08 CEST 2019


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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: ppp_0.1.tar.gz
Type: application/x-gzip
Size: 687 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-package-devel/attachments/20190607/5ed94344/attachment.bin>


More information about the R-package-devel mailing list