MRE to produce the message is the following: setClass("Foo") setOldClass("Bar") setAs("Bar", "Foo", \(x) x) # NOTE: arguments in definition for coerce changed from (x) to (from) In an interactive setting, that may be fine, but I first encountered this message in the install log of a package for which I am not the author (nor do I have any context on the package, really). As such it took me much longer than it otherwise would have to pick up on the connection between 'coerce' and 'setAs' (as searching the sources for 'coerce' yielded nothing). That the faulty argument is the ubiquitous 'x' is also a major impediment. It would be much better to surface the relationship to 'setAs' in this message. I believe that logic has to live in setAs itself as the delegated substituteFunctionArgs loses the proper context (unless we dare to resort to sys.calls()). Sharing here first per usual as I am not very familiar with S4, in case this all is much clearer to someone with a sharper eye for S4.