Skip to content

inconsistent behaviour of c(...)

5 messages · Michael Meyer, Peter Langfelder, Rui Barradas +1 more

#
Greetings,

Running R 3.5.0 under Windows 7

typeof(c(1,"2")) yields "character" as expected. But in

d.f <- data.frame(C=c(1,"2"))

typeof(d.f$C) yields "integer".

Is this a bug?

Michael Meyer
#
I think your character vector got converted to a factor. See ?options,
section stringsAsFactors:

     ?stringsAsFactors?: The default setting for arguments of
          ?data.frame? and ?read.table?.
The default is TRUE, so strings get converted to factors when building
data frames.

Set options(stringsAsFactors=FALSE) and try again.

Peter

On Fri, Jul 19, 2019 at 12:15 AM Michael Meyer via R-devel
<r-devel at r-project.org> wrote:
#
Hello,

A way to see this is with ?class

# OP's code
typeof(c(1,"2")) # "character"

d.f <- data.frame(C=c(1,"2"))
typeof(d.f$C)    # "integer"

# And check the objects' classes
class(c(1,"2")) # "character"
class(d.f$C)    # "factor"


Hope this helps,

Rui Barradas


?s 08:19 de 19/07/19, Peter Langfelder escreveu:
#
I forgot there is also ?mode.


mode(c(1,"2")) # "character"
mode(d.f$C)    # "numeric" (not "integer")


Rui Barradas

?s 11:54 de 19/07/19, Rui Barradas escreveu:
#
I was trying to use one of the headers in R_ext/, but had trouble.  I
determined that it was due to using restricted keywords as variable names.
So to load in the header, I needed to do this:

#define class klass
#define private krivate
#include <R_ext/Connections.h>
#undef class
#undef private

I know that the altrep.h header previously had the same issue, but was
fixed.  Could this be changed as well?