Hi all, I am working on an application in which we'd like to use attributes to attach simple metadata to arbitrary R objects. It is essential that all functions that will work on the original object will also work on the object after metadata attributes have been added. However, this is not always the case for vectors: functions such as barplot, diffinv, and rle use is.vector, which (as documented and as discussed previously on this list) returns FALSE for a vector that has any attributes other than "names". For example, > x <- 1:3 > attr(x, "date") <- date() > barplot(x) Error in barplot.default(x) : 'height' must be a vector or a matrix It strikes me that is.vector may be an overly strict test in these cases. Shouldn't barplot(x) behave the same regardless of whether vector x has any (non-special) attributes? In barplot.default, what if is.vector(x) were replaced with something along the lines of: is.atomic(x) && is.null(dim(x)) Admittedly, other functions currently using is.vector may require something slightly different. One such example is data.frame, which uses is.vector when applying recycling rules. It appears it is used at least in part to filter out AsIs objects, so a specific test of whether the object class is AsIs may be appropriate? No doubt a slew of functions in user-contributed packages use is.vector in similar fashion, so even modifying core functions wouldn't fully solve our particular problem. On that note, I don't suppose there's hope of revisiting the definition of is.vector itself? Bear in mind, I do appreciate that there are good reasons for its current behavior, and compatibility constraints on changing it. Thanks, Jim ------------------------------ James Regetz, Ph.D. Scientific Programmer/Analyst National Center for Ecological Analysis & Synthesis 735 State St, Suite 300 Santa Barbara, CA 93101