# [R] Robust comparison coding

David Kane <David Kane a296180 at mica.fmr.com
Thu May 24 21:22:02 CEST 2001

```Are there guidelines in R for writing robust comparison codes? I am most
worried about situations in which the code must subset out some data without
knowing ahead of time the type of the variable that will be used for the
subseting. Here is a toy example:

> version
_
platform sparc-sun-solaris2.6
arch     sparc
os       solaris2.6
system   sparc, solaris2.6
status
major    1
minor    2.3
year     2001
month    04
day      26
language R
> set.seed(9)
> temp <- data.frame(x = sample(11:13, 10, replace = TRUE))
> for(i in unique(temp[["x"]])) {cat("There are", sum(temp[["x"]] == i), "values equal to", i, "\n")}
There are 2 values equal to 13
There are 7 values equal to 11
There are 1 values equal to 12	# These are the answers that I want to see. But
# what if x is a factor?

> temp\$x <- as.factor(temp\$x)
> for(i in unique(temp[["x"]])) {cat("There are", sum(temp[["x"]] == i), "values equal to", i, "\n")}
There are 0 values equal to 3
There are 0 values equal to 1
There are 0 values equal to 2

Not what I want. The problem seems to be that R is using the underlying code
for the factor (1,2,3) instead of the level. (Note how the problem goes away
when you draw x from 1:3 instead of from 11:13.) Note that:

> unique(temp[["x"]])
 13 11 12
Levels:  11 12 13

In any event, how can I write code so that the comparison works no matter what
mode (numeric, character, factor) x is? Or is the problem that a construction
like (i in unique(temp[["x"]])) is ill-advised for some reason?

Thanks,

Dave Kane
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```