[Rd] Is structure(NA, class = c("def", "condition")) a valid 'condition' object?

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Wed Oct 8 14:32:35 CEST 2025


Besides `conditionMessage` and `conditionCall`, base R also has methods 
defined for `as.character` and `print`, but they appear to make no 
assumptions about the object other than having `conditionMessage` and 
`conditionCall` defined.

The help page is silent about what type of thing `conditionCall()` 
should return, but the objects produced by the standard condition 
functions will return the `call` argument, which defaults to `NULL`, but 
could be a "call expression".

So I'm not sure your definition of the `conditionCall()` methods is 
going to work:  `list()` doesn't return an expression.  Returning 
`NULL` would be better.

Of course, in S3 "valid" isn't defined formally; it just means something 
that won't mess up.  So it's quite possible `list()` is okay.

Duncan Murdoch


On 2025-10-07 7:42 p.m., Henrik Bengtsson wrote:
> I think structure(NA, class = c("def", "condition")) is a valid
> 'condition' object. Am I wrong?
> 
> BACKGROUND:
> 
> The abstract 'condition' class: why type or mode can a 'condition' object have?
> 
> In help("condition"), we can read that:
> 
> "Conditions are objects inheriting from the abstract class condition. ..."
> 
> and then it specifies the API, i.e. the methods it should support, e.g.
> 
> "The functions conditionMessage and conditionCall are generic
> functions that return the message and call of a condition."
> 
> Then we have several functions for creating 'condition' objects, e.g.
> 
>> simpleCondition
> function (message, call = NULL)
> {
>      class <- c("simpleCondition", "condition")
>      structure(list(message = as.character(message), call = call),
>          class = class)
> }
> 
> AFAIK, all of them create 'condition' object of type 'list'.
> 
> 
> CAN CONDITIONS BE ENVIRONMENTS OR ATOMIC OBJECTS?
> 
> However, is the list type a requirement? I cannot find it specified
> anywhere. The way I interpret help("condition") and how it is
> carefully written using terms like "abstract class" and not mentioning
> the type anywhere, I take it as:
> 
> cnd1 <- structure(new.env(), class = c("abc", "condition"))
> 
> and
> 
> cnd2 <- structure(NA, class = c("def", "condition"))
> 
> are both valid 'condition' objects, as long as we define the S3
> methods for `conditionMessage()` and `conditionCall()`, e.g.
> 
> conditionMessage.abc <- function(c) "boom"
> conditionCall.abc <- function(c) list()
> 
> conditionMessage.def <- function(c) "boom"
> conditionCall.def <- function(c) list()
> 
> FWIW, I create 'condition' objects of type NA in my 'R.oo' package
> going back ~25 years.
> 
> Thanks,
> 
> Henrik
> 
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list