Object validation and formal classes
On Thu, Jan 29, 2004 at 09:30:19PM +0100, Torsten Steuernagel wrote:
I'm using R 1.8.1 (Win32, Linux) and have some difficulties using
validation functions for S4 classes. The problem is if I specify a
validation function with setValidity("myclass", validate.myclass) object
validation is only performed when I create an instance using
new("myclass"), or when I explicitly call validObject(x) where x is of
class "myclass", of course.
According to the reference docs, I would expect that validation always
takes place implicitly when I manipulate an object of "myclass". This
especially includes implicit validation if I change slots directly, i.e.
x at myslot <- 1:50 should call my validation function. Unfortunately, it
isn't called and instead of raising an error and leaving the object
unchanged in case validation fails, the object is always changed no
matter what I assign to the slot.
There are some efficiency issues that prevent constant checking (at least at the present time). There are also some other issues that need to be adequately addressed too. For example, suppose I had an object with two slots a - a character string b - the number of characters and I set my validity checker to make sure that the length of the string is the number in b. Now that basically means that I can never change the string (except to other strings of the same length) if validity checking happened after every change. I somehow need changing both a and b to be instantaneous (which they currently are not). We have not really gone far enough down that path yet to know what the right thing is, but we are working on it. So for now validity checking occurs at a few specific points and if/when you ask for it. Robert
I'm not sure if I'm missing something here or if I just didn't get the point of validation functions, but I believe there must be a way to assure that an object is in a consistent state. Thanks for your help, Torsten
______________________________________________ R-help at stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
+---------------------------------------------------------------------------+ | Robert Gentleman phone : (617) 632-5250 | | Associate Professor fax: (617) 632-2444 | | Department of Biostatistics office: M1B20 | | Harvard School of Public Health email: rgentlem at jimmy.harvard.edu | +---------------------------------------------------------------------------+