## 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"