OT: Your signature [Bioanalytics]

posted by Helmut Homepage – Vienna, Austria, 2019-03-27 14:41 (1280 d 17:14 ago) – Posting: # 20093
Views: 4,836

Hi ElMaestro,

x=c("Foo", "Bar")
b=data.frame(x)
typeof(b[,1]) ##aha, integer?
b[,1]+1 ##then let me add 1


[image]Lemme explain:

x <- c("Foo", "Bar")
is.character(x)
[1] TRUE
b <- data.frame(x)
is.character(b)
[1] FALSE
is.data.frame(b)
[1] TRUE
print(b)
    x
1 Foo
2 Bar

  So far, so good. What else?
str(b)
'data.frame':   2 obs. of  1 variable:
 $ x:
Factor w/ 2 levels "Bar","Foo": 2 1

  Implicitly you are using the default of data.frame() like here:
c <- data.frame(x, stringsAsFactors=TRUE)
  Check #1
identical(c, b)
[1] TRUE

  Check #2
c == b
        x
[1,] TRUE
[2,] TRUE

  See the point?
typeof(b[, 1]) ##aha, integer?
[1] "integer"

  Correct. Factors are always coded as integers internally.
  Check #3
is.factor(b[, 1])
[1] TRUE

  Note also the output of str(b) above where factors are given in lexical order.
  However, since we defined x <- c("Foo", "Bar"), "Bar" gets the level 2
  and "Foo" the level 1 in b.
b[, 1]+1 ##then let me add 1
[1] NA NA
Warning message:
In Ops.factor(b[, 1], 1) : ‘+’ not meaningful for factors

  Well roared, lion!
  On the other hand:
d <- data.frame(x, stringsAsFactors=FALSE)
print(d)
    x
1 Foo
2 Bar

str(d)
'data.frame':   2 obs. of  1 variable:
 $ x:
chr  "Foo" "Bar"
typeof(c[, 1])
[1] "character"

  Is this what you expected?
d[, 1]+1
Error in c[, 1] + 1 : non-numeric argument to binary operator

  Sure. Rubbish in, rubbish out.
  Personally I prefer a straight error over a warning producing NAs.

:cool:

Dif-tor heh smusma 🖖 Довге життя Україна! [image]
Helmut Schütz
[image]

The quality of responses received is directly proportional to the quality of the question asked. 🚮
Science Quotes

Complete thread:

UA Flag
Activity
 Admin contact
22,391 posts in 4,685 threads, 1,595 registered users;
online 4 (1 registered, 3 guests [including 2 identified bots]).
Forum time: Wednesday 08:55 CEST (Europe/Vienna)

The real struggle is not between the right and the left
but between the party of the thoughtful
and the party of the jerks.    Jimmy Wales

The Bioequivalence and Bioavailability Forum is hosted by
BEBAC Ing. Helmut Schütz
HTML5