Frank Schwidom
2014-Mar-30 10:58 UTC
unlist( list( factor( 'a'), 1)) == c( 1, 1); unlist( list( factor( 'a'), factor( 1)))==c( 'a', '1')
Hi,> c( factor( 'a'), ( 1))[1] 1 1> c( factor( 'a'), factor( 1))[1] 1 1> c( factor( 'a'), factor( 'b'))[1] 1 1> unlist( list( factor( 'a'), 1))[1] 1 1> unlist( list( factor( 'a'), factor( 1)))[1] a 1 Levels: a 1> unlist( list( factor( 'a'), factor( 'b')))[1] a b Levels: a b In an data.frame it is the same> unlist( data.frame( factor( 'a'), factor( 1)))factor..a.. factor.1. a 1 Levels: a 1> unlist( data.frame( factor( 'a'), ( 1)))factor..a.. X.1. 1 1 Im not sure, whether this behaviour can be seen as an error. But if I for instance use read.table or scan then these functions will use data.frame(..., # with stringsAsFactors = default.stringsAsFactors()) And so rows will by default appear, which contains factors and numbers. If i want to convert the content in an as.character datatype then the factor indexes will be used instead of the strings. This behaviour changes, if i switch off the global Option options( stringsAsFactors= FALSE)> unlist( data.frame( 'a', ( 1)))X.a. X.1.> unlist( list( 'a', ( 1)))[1] "a" "1" This leads to some questions: If factors represent an optimized vector of strings (or other datatypes) why can an operation on this factor not behave like an operation on vector of strings (or ...)? And: what is the best solution to convert an list( factor, number) to its character representation? Or: is it a bug? Regards