Blame | Last modification | View Log | Download | RSS feed
\name{warnErrList}\alias{warnErrList}\title{Collect and Summarize Errors From List}\description{Collect errors (class \code{"error"}, typically from \code{\link{tryCatch}})from a list \code{x} into a \dQuote{summary warning}, by defaultproduce a \code{\link{warning}} and keep that message as\code{"warningMsg"} attribute.}\usage{warnErrList(x, warn = TRUE, errValue = NULL)}\arguments{\item{x}{a \code{\link{list}}, typically from applying models to alist of data (sub)sets, e.g., using \code{\link{tryCatch}(*, error = identity)}.}\item{warn}{logical indicating if \code{\link{warning}()} should becalled.}\item{errValue}{the value with which errors should be replaced.}}\value{a \code{\link{list}} of the same length and names as the \code{x}argument, with the error components replaced by \code{errValue},\code{\link{NULL}} by default, and summarized in the\code{"warningMsg"} attribute.}\seealso{The \code{warnErrList()} utility has been used in\code{\link[nlme]{lmList}()} and \code{\link[nlme]{nlsList}()} inrecommended package \CRANpkg{nlme} forever.}\examples{## Regression for each Chick:ChWtgrps <- split(ChickWeight, ChickWeight[,"Chick"])sapply(ChWtgrps, nrow)# typically 12 obs.nlis1 <- lapply(ChWtgrps, function(DAT) tryCatch(error = identity,lm(weight ~ (Time + I(Time^2)) * Diet, data = DAT)))nl1 <- warnErrList(nlis1) #-> warning :## 50 times the same error (as Diet has only one level in each group)stopifnot(sapply(nl1, is.null)) ## all errors --> all replaced by NULLnlis2 <- lapply(ChWtgrps, function(DAT) tryCatch(error = identity,lm(weight ~ Time + I(Time^2), data = DAT)))nl2 <- warnErrList(nlis2)stopifnot(identical(nl2, nlis2)) # because there was *no* error at allnlis3 <- lapply(ChWtgrps, function(DAT) tryCatch(error = identity,lm(weight ~ poly(Time, 3), data = DAT)))nl3 <- warnErrList(nlis3) # 1 error caught:stopifnot(inherits(nlis3[[1]], "error"), identical(nl3[-1], nlis3[-1]), is.null(nl3[[1]]))## With different error messagesif(requireNamespace("nlme")) { # almost always, as it is recommendeddata(Soybean, package="nlme")attr(Soybean, "formula") #-> weight ~ Time | Plot => split by "Plot":L <- lapply(split(Soybean, Soybean[,"Plot"]),function(DD) tryCatch(error = identity,nls(weight ~ SSlogis(Time, Asym, xmid, scal), data = DD)))Lw <- warnErrList(L)} # if <nlme>}\keyword{error}\keyword{utilities}