Full thread here: https://github.com/tidyverse/broom/issues/287
Reproducible example: is.object(freeny$y) # [1] TRUE attr(freeny$y, 'class') # [1] "ts" class(freeny$y) # [1] "ts" # ts attribute wiped by model.frame class(model.frame(y ~ ., data = freeny)$y) # [1] "numeric" attr(model.frame(y ~ ., data = freeny)$y, 'class') # NULL # but still: is.object(model.frame(y ~ ., data = freeny)$y) # [1] TRUE That is, given a numeric vector with class "ts", model.frame strips the "ts" attribute but keeps the is.object property. This behavior is alluded to in ?model.frame: Unless na.action = NULL, time-series attributes will be removed from the > variables found (since they will be wrong if NAs are removed). > And in fact explicitly setting na.action = NULL prevents dropping the class: class(model.frame(y ~ ., data = freeny, na.action = NULL)$y) # [1] "ts" The reason this looks especially like a bug is that it differs from how na.omit behaves: DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA)) is.object(DF$y) # [1] FALSE class(DF$y) = 'foo' is.object(DF$y) # [1] TRUE class(na.omit(DF)$y) # [1] "numeric" is.object(na.omit(DF)$y) # [1] FALSE That is, similarly presented with a classed object, na.omit strips the class *and* the OBJECT attribute. Thanks, Michael Chirico [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel