The advantage of "abort" (R_Suicide) over the default (R error) is that it cannot be caught accidentally, so that one can detect more errors, and it may be easier to find where the error happened. To make the default behavior less surprising/more user friendly, and to allow intentional catching of these errors, the default for R CMD check --as-cran was changed in R-devel so that the normal R error is thrown, and the documentation in R Internals updated accordingly. One thus has to set the variable explicitly to get the stricter checks.

Best
Tomas

On 6/7/19 8:51 PM, Tierney, Luke wrote:
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.dun...@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.dun...@gmail.com
<mailto:murdoch.dun...@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:
     nas...@uottawa.ca <mailto:nas...@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@t|@t|k@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@r-project.org
     <mailto:R-package-devel@r-project.org> mailing list
     >>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
     >>>
     >>
     >> ______________________________________________
     >> R-package-devel@r-project.org
     <mailto:R-package-devel@r-project.org> mailing list
     >> https://stat.ethz.ch/mailman/listinfo/r-package-devel
     >>
     >
     > ______________________________________________
     > R-package-devel@r-project.org
     <mailto:R-package-devel@r-project.org> mailing list
     > https://stat.ethz.ch/mailman/listinfo/r-package-devel
     >

     ______________________________________________
     R-package-devel@r-project.org <mailto:R-package-devel@r-project.org>
     mailing list
     https://stat.ethz.ch/mailman/listinfo/r-package-devel



______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to