[R-pkg-devel] Help on Windows CRAN Check

Tomas Kalibera tom@@@k@||ber@ @end|ng |rom gm@||@com
Thu Mar 5 09:04:40 CET 2020


On 3/5/20 4:26 AM, John Lawson wrote:
> I see this error on the CRAN Check report
>
>> ### ** Examples
>>
>> #Definitive Screening Design
>> library(daewr)
>> set.seed(1234)
>> x <- DefScreen(m=5,c=0)
>> colnames(x) <- paste("x",1:5,sep="")
>> x$y <- 3*x$x1 + 2*x$x2 + 2*x$x4*x$x5 + x$x3^2 + 2*x$x1^2 + rnorm(nrow(x),0,1)
>> (z <- HierAFS(x$y,x[,-6],m=5,c=0,step=4,nm1=FALSE ))
>   ----------- FAILURE REPORT --------------
>   --- failure: the condition has length > 1 ---
>   --- srcref ---
> :
>   --- package (from environment) ---
> daewr
>   --- call from context ---
> ihstep(y, x, m, c)
>   --- call from argument ---
> if (t1 == "I" & t2 == "(") {
>      iquad = TRUE
> }
>   --- R stacktrace ---
> where 1: ihstep(y, x, m, c)
> where 2: eval(expr, pf)
> where 3: eval(expr, pf)
> where 4: withVisible(eval(expr, pf))
> where 5: evalVis(expr)
> where 6: capture.output(res <- ihstep(y, x, m, c))
> where 7: withCallingHandlers(expr, warning = function(w)
> invokeRestart("muffleWarning"))
> where 8: suppressWarnings(invisible(capture.output(res <- ihstep(y, x,
>      m, c))))
> where 9: HierAFS(x$y, x[, -6], m = 5, c = 0, step = 4, nm1 = FALSE)
>
>   --- value of length: 3 type: logical ---
> [1] FALSE FALSE FALSE
>   --- function from context ---
> function (y, des, m, c)
> {
>      lin <- colnames(des)
>      values <- c("A", "B", "C", "D", "E", "F", "G", "H", "I",
>          "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
>          "U", "V", "W", "X", "Y", "Z")
>      repl <- c("I(A^2)", "I(B^2)", "I(C^2)", "I(D^2)", "I(E^2)",
>          "I(F^2)", "I(G^2)", "I(H^2)", "I(I^2)", "I(J^2)", "I(K^2)",
>          "I(L^2)", "I(M^2)", "I(N^2)", "I(O^2)", "I(P^2)", "I(Q^2)",
>          "I(R^2)", "I(S^2)", "I(T^2)", "I(U^2)", "I(V^2)", "I(W^2)",
>          "I(X^2)", "I(Y^2)", "I(Z^2)")
>      repl.tab <- cbind(values, repl)
>      if (m == 0) {
>          quad <- character()
>      }
>      else {
>          indx <- rep(0, m)
>          for (i in 1:m) {
>              indx[i] <- match(lin[i], repl.tab[, 1], nomatch = 0)
>          }
>          quad <- rep("A", m)
>          for (i in 1:m) {
>              quad[i] <- lin[i]
>          }
>          quad[indx != 0] <- repl.tab[indx, 2]
>          quad <- paste(quad, collapse = "+")
>      }
>      dat <- data.frame(y = y, des)
>      lm1 <- lm(y ~ (.)^2, data = dat)
>      mm <- model.matrix(lm1)
>      fact <- colnames(mm)
>      fact <- fact[-1]
>      fact <- paste(fact, collapse = "+")
>      mod <- paste(c(fact, quad), collapse = "+")
>      lm2 <- lm(reformulate(termlabels = mod, response = "y"),
>          data = dat)
>      mm <- model.matrix(lm2)
>      mm <- mm[, 2:ncol(mm)]
>      trm <- firstm(y, mm)
>      d1 <- data.frame(y = y, mm[, trm])
>      t1 <- substr(trm, 1, 1)
>      t2 <- substr(trm, 2, 2)
>      t3 <- substr(trm, 3, 3)
>      iquad = FALSE
>      if (t1 == "I" & t2 == "(") {
>          iquad = TRUE
>      }
>      hmt <- trm
>      if (t2 == "") {
>          nms <- names(d1)
>          nms[2] <- hmt
>          names(d1) <- nms
>      }
>      m1 <- lm(y ~ (.), data = d1)
>      result <- summary(m1)
>      print(result)
>      return(trm)
> }
> <bytecode: 0x088fe000>
> <environment: namespace:daewr>
>   --- function search by body ---
> Function ihstep in namespace daewr has this body.
>   ----------- END OF FAILURE REPORT --------------
> Fatal error: the condition has length > 1

The problem is that the condition t1 == "I" & t2 == "(" of the if 
statement in the code is not a scalar. Even though this has been allowed 
in R historically, the first element has been used, it is almost always 
a sign of coding error, so it is going to become a runtime error.

So what one should do is fix the code to only use scalar conditions - 
ensure t1, t2 are scalar, replace & by &&.

You can enable these checks on your end using an environment variable 
(more details are in R Internals, _R_CHECK_LENGTH_1_CONDITION_ and 
related is _R_CHECK_LENGTH_1_LOGIC2_).|||
|

Best
Tomas


>
>
> However on my own computer or on Rforge
>
> I see this:
>
> * checking examples ... OK
> * DONE
>
> Status: OK
>
> -- R CMD check results ---------------------------------------- daewr 1.1-9 ----
> Duration: 1m 1.8s
>
> 0 errors v | 0 warnings v | 0 notes v
>
> R CMD check succeeded
>
>
> I am not sure what the error is or how to correct it. Any help would
> be greatly appreciated,
>
> John Lawson
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



	[[alternative HTML version deleted]]



More information about the R-package-devel mailing list