On 07/06/2019 16:47, Duncan Murdoch wrote:
By curiosity, I tried but to no avail. Moreover, I have tried to trigger a similar error in different place by adding to the John's example in man/fchk.Rd the following code: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, usetry(stop("msg"), silent = TRUE)
#... the same before } # very simple, but ... print(Sys.getenv("_R_CHECK_LENGTH_1_LOGIC2_", unset="unset")) a=1:3 || 1:3 cat("a=", a, "\n") y<-1:10 #... the same after.add failed again. This part of code works without any error signaling while fchk()'s situation continue to flag up an error. From fchk-Ex.Rout, we can see:
... + } # very simple, but ... > > print(Sys.getenv("_R_CHECK_LENGTH_1_LOGIC2_", unset="unset")) [1] "package:_R_CHECK_PACKAGE_NAME_,abort,verbose" > a=1:3 || 1:3 > cat("a=", a, "\n") a= TRUE > y<-1:10 ... Function evaluation returns a vector not a scalar ----------- FAILURE REPORT -------------- --- failure: length > 1 in coercion to logical --- ... While in regular R session: > Sys.unsetenv("_R_CHECK_LENGTH_1_LOGIC2_") > (a=1:3 || 1:3) [1] TRUE > Sys.setenv("_R_CHECK_LENGTH_1_LOGIC2_"="") > (a=1:3 || 1:3) Error in 1:3 || 1:3 : 'length(x) = 3 > 1' in coercion to 'logical(1)'So, to my mind, 'a=1:3 || 1:3' should be considered as an error in a check with "--as-cran" but for some reason is not.
Both fchk with modified example and corresponding fchk-Ex.Rout are enclosed. Best, Serguei.
Duncan MurdochI recognize that this is the failure -- it is indeed the check I'm trying tocatch -- 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(fval)The problem is that both is.infinite(fval) and 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 FALSEThe || 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(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 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 2019Previous 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 codeMessages 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.RIt 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.RRegards, Berry ________________________________From: R-package-devel <r-package-devel-bounces using r-project.org> on behalf of J C Nash <profjcnash using gmail.com>Sent: Thursday, June 6, 2019 15:03 To: List r-package-devel Subject: [R-pkg-devel] try() in R CMD check --as-cranAfter 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 inquestion 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 seemsto 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 evenweeks if past experience is a guide. JN ______________________________________________ R-package-devel using 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 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______________________________________________ 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______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel
fchk_2019-6.5-1.tar.gz
Description: application/gzip
R version 3.6.0 (2019-04-26) -- "Planting of a Tree" Copyright (C) 2019 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > pkgname <- "fchk" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > base::assign(".ExTimings", "fchk-Ex.timings", pos = 'CheckExEnv') > base::cat("name\tuser\tsystem\telapsed\n", file=base::get(".ExTimings", pos = > 'CheckExEnv')) > base::assign(".format_ptime", + function(x) { + if(!is.na(x[4L])) x[1L] <- x[1L] + x[4L] + if(!is.na(x[5L])) x[2L] <- x[2L] + x[5L] + options(OutDec = '.') + format(x[1L:3L], digits = 7L) + }, + pos = 'CheckExEnv') > > ### * </HEADER> > library('fchk') > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') > cleanEx() > nameEx("fchk") > ### * fchk > > flush(stderr()); flush(stdout()) > > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### Name: fchk > ### Title: Run tests, where possible, on user objective function > ### Aliases: fchk > ### Keywords: check > > ### ** Examples > > # Want to illustrate each case. > # Ben Bolker idea for a function that is NOT scalar > > benbad<-function(x, y){ + # y may be provided with different structures + f<-(x-y)^2 + } # very simple, but ... > > print(Sys.getenv("_R_CHECK_LENGTH_1_LOGIC2_", unset="unset")) [1] "package:_R_CHECK_PACKAGE_NAME_,abort,verbose" > a=1:3 || 1:3 > cat("a=", a, "\n") a= TRUE > y<-1:10 > x<-c(1) > cat("test benbad() with y=1:10, x=c(1)\n") test benbad() with y=1:10, x=c(1) > tryfc01 <- try(fc01<-fchk(x, benbad, trace=3, y), silent=TRUE) fchk: ffn = function (x, y) { f <- (x - y)^2 } fchk: xpar:[1] 1 fchk: dots:[[1]] [1] 1 2 3 4 5 6 7 8 9 10 about to call ffn(xpar, ...) ffn:function (x, y) { f <- (x - y)^2 } xpar & dots:[1] 1 [[1]] [1] 1 2 3 4 5 6 7 8 9 10 test in fchk: [1] 0 1 4 9 16 25 36 49 64 81 Function value at supplied parameters = [1] 0 1 4 9 16 25 36 49 64 81 num [1:10] 0 1 4 9 16 25 36 49 64 81 NULL [1] TRUE Function evaluation returns a vector not a scalar ----------- FAILURE REPORT -------------- --- failure: length > 1 in coercion to logical --- --- srcref --- : --- package (from environment) --- fchk --- call from context --- fchk(x, benbad, trace = 3, y) --- call from argument --- is.infinite(fval) || is.na(fval) --- R stacktrace --- where 1: fchk(x, benbad, trace = 3, y) 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(fc01 <- fchk(x, benbad, trace = 3, y), silent = TRUE) --- value of length: 10 type: logical --- [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE --- function from context --- function (xpar, ffn, trace = 0, ...) { maxard10 <- function(one, two) { result <- max(abs((one - two)/(abs(one) + abs(two) + 10))) return(result) } if (trace > 2) { cat("fchk: ffn =\n") print(ffn) cat("fchk: xpar:") print(xpar) cat("fchk: dots:") print(list(...)) } infeasible <- FALSE excode <- 0 msg <- "fchk OK" if (trace > 1) { cat("about to call ffn(xpar, ...)\n") cat("ffn:") print(ffn) cat("xpar & dots:") print(xpar) print(list(...)) } test <- try(fval <- ffn(xpar, ...)) if (trace > 1) { cat("test in fchk:") print(test) } if (inherits(test, "try-error")) { fval <- NA attr(fval, "inadmissible") <- TRUE } if (trace > 0) { cat("Function value at supplied parameters =") print(fval) print(str(fval)) print(is.vector(fval)) } if (!is.null(attr(fval, "inadmissible")) && (attr(fval, "inadmissible"))) { infeasible <- TRUE excode <- -1 msg <- "Function evaluation returns INADMISSIBLE" if (trace > 0) cat(msg, "\n") } if (is.vector(fval)) { if (length(fval) > 1) { excode <- -4 msg <- "Function evaluation returns a vector not a scalar" infeasible <- TRUE if (trace > 0) cat(msg, "\n") } } if (is.list(fval)) { excode <- -4 msg <- "Function evaluation returns a list not a scalar" infeasible <- TRUE if (trace > 0) cat(msg, "\n") } if (is.matrix(fval)) { excode <- -4 msg <- "Function evaluation returns a matrix list not a scalar" infeasible <- TRUE if (trace > 0) cat(msg, "\n") } if (is.array(fval)) { excode <- -4 msg <- "Function evaluation returns an array not a scalar" infeasible <- TRUE if (trace > 0) cat(msg, "\n") } if ((length(fval) != 1) && !(is.vector(fval))) { excode <- -4 msg <- "Function returned not length 1, despite not vector, matrix or array" infeasible <- TRUE if (trace > 0) cat(msg, "\n") } if (!(is.numeric(fval))) { excode <- -1 msg <- "Function evaluation returned non-numeric value" infeasible <- TRUE if (trace > 0) cat(msg, "\n") } if (is.infinite(fval) || is.na(fval)) { excode <- -1 msg <- "Function evaluation returned Inf or NA (non-computable)" infeasible <- TRUE if (trace > 0) cat(msg, "\n") } if (trace > 0) cat("Function at given point=", fval, "\n") answer <- list(fval = fval, infeasible = infeasible, excode = excode, msg = msg) } <bytecode: 0x3be9c78> <environment: namespace:fchk> --- function search by body --- Function fchk in namespace fchk has this body. ----------- END OF FAILURE REPORT -------------- Fatal error: length > 1 in coercion to logical
______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel