[BioC] merge on DataFrame forcing character->factor

Murat Tasan mmuurr at gmail.com
Tue Aug 20 20:18:07 CEST 2013


hi all -- does anyone know how to turn off the forced conversion of
character vectors to factors when merging with IRanges::DataFrame
objects?
in the example below fooX.df is a base data.frame, while fooX.DF is
the IRanges::DataFrame equivalent.

example:

> foo1.df <- data.frame(a = letters[1:10], b = runif(10), stringsAsFactors = FALSE); foo1.DF <- DataFrame(foo1.df)
> foo2.df <- data.frame(a = letters[1:10], c = -runif(10), stringsAsFactors = FALSE); foo2.DF <- DataFrame(foo2.df)
> foo3.df <- merge(foo1.df, foo2.df); foo3.DF <- merge(foo1.DF, foo2.DF)
> sapply(foo3.df, class); foo3.df
          a           b           c
"character"   "numeric"   "numeric"
   a         b           c
1  a 0.4112609 -0.64623114
2  b 0.5656937 -0.88098189
3  c 0.4682333 -0.26826974
4  d 0.1374115 -0.05801876
5  e 0.3506727 -0.23886691
6  f 0.5035583 -0.14777341
7  g 0.6833072 -0.09146686
8  h 0.7256269 -0.20445511
9  i 0.9553401 -0.76399925
10 j 0.3809191 -0.66888397
> sapply(foo3.DF, class); foo3.DF
        a         b         c
 "factor" "numeric" "numeric"
DataFrame with 10 rows and 3 columns
          a         b           c
   <factor> <numeric>   <numeric>
1         a 0.4112609 -0.64623114
2         b 0.5656937 -0.88098189
3         c 0.4682333 -0.26826974
4         d 0.1374115 -0.05801876
5         e 0.3506727 -0.23886691
6         f 0.5035583 -0.14777341
7         g 0.6833072 -0.09146686
8         h 0.7256269 -0.20445511
9         i 0.9553401 -0.76399925
10        j 0.3809191 -0.66888397


i've tried adding the "stringsAsFactors = FALSE" into the merge(...)
calls, thinking perhaps that switch is forwarded to an underlying
data.frame(...) call, but that doesn't seem to the be the case (as "a"
is still converted to a factor).
i'd also rather not turn off the global stringsAsFactors behavior, as
i want to ensure my script runs properly on others' R setups without
having to modify their state.

thanks for any help!

-murat



More information about the Bioconductor mailing list