## klass frukt och character:
x <- structure(c("banan", "apelsin"), class = c("frukt", "character"))
class(x)
## [1] "frukt" "character"
## Observera:
try(data.frame(structure("banan", class = "frukt")))
geterrmessage()
## [1] "Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : \n cannot coerce class \"\"frukt\"\" to a data.frame\n"
## Alltså, data.frame anropar as.data.frame men:
methods(as.data.frame)
## [1] as.data.frame.aovproj* as.data.frame.array
## [3] as.data.frame.AsIs as.data.frame.character
## [5] as.data.frame.complex as.data.frame.data.frame
## [7] as.data.frame.data.table* as.data.frame.Date
## [9] as.data.frame.default as.data.frame.difftime
## [11] as.data.frame.factor as.data.frame.ftable*
## [13] as.data.frame.function* as.data.frame.grouped_df*
## [15] as.data.frame.idf* as.data.frame.integer
## [17] as.data.frame.ITime* as.data.frame.list
## [19] as.data.frame.logical as.data.frame.logLik*
## [21] as.data.frame.matrix as.data.frame.model.matrix
## [23] as.data.frame.numeric as.data.frame.numeric_version
## [25] as.data.frame.ordered as.data.frame.POSIXct
## [27] as.data.frame.POSIXlt as.data.frame.raw
## [29] as.data.frame.rowwise_df* as.data.frame.table
## [31] as.data.frame.tbl_cube* as.data.frame.tbl_df*
## [33] as.data.frame.tbl_dt* as.data.frame.tbl_sql*
## [35] as.data.frame.ts as.data.frame.vector
##
## Non-visible functions are asterisked
## ... dvs, det finns ingen method för as.data.frame för objekt av klass "frukt".
## I detta fall krävs alltså att klassen frukt också ärver egenskaper av klassen "character"
## Men om x nu är både frukt och character så kan detta gå förlorat ...
df <- data.frame(x)
class(df)
## [1] "data.frame"
lapply(df, class)
## $x
## [1] "factor"
## ... detta just eftersom det också är en character och dessa konverteras till factor per default ... men:
df2 <- data.frame(x, stringsAsFactors = FALSE)
lapply(df2, class)
## $x
## [1] "frukt" "character"
## Utgår vi från en data.frame med character-variabel (som här blir factor) ...
y <- data.frame(fr = c("banan", "apelsin"), num = 1:2, char = letters[1:2])
lapply(y, class)
## $fr
## [1] "factor"
##
## $num
## [1] "integer"
##
## $char
## [1] "factor"
## ... så kan fr byta klass om så anges (här funkar det förstås att bara enge klassen "frukt" eftersom vektorn redan är den del av en data.frame; man anropar inte as.data.fram):
class(y$fr) <- "frukt"
lapply(y, class)
## $fr
## [1] "frukt"
##
## $num
## [1] "integer"
##
## $char
## [1] "factor"