[R] How to call a value labels attribute?

Heinz Tuechler tuechler at gmx.at
Tue Jun 6 11:41:56 CEST 2006


Thank you, Richard. As soon as I find time I will carefully look at your
solution and your book.

Heinz

At 10:01 05.06.2006 -0400, Richard M. Heiberger wrote:
>Aha!  Thank you for the more detailed example.
>
>My solution for that situation is an attribute "position" and function
>as.position().  I use this in my book
>
>                Statistical Analysis and Data Display
>                Richard M. Heiberger and Burt Holland
>
>The online files for the book are available at
>                http://springeronline.com/0-387-40270-5
>
>
>
>For this example, you need the function as.position() included in this
>email.
>
>
>### example ########
>x <- ordered(c(1,2,3,2,4,3,1,2,4,3,2,1,3),
>             labels=c("small", "medium", "large", "very.large"))
>x
>attr(x, "position") <- c(1,2,4,8)
>x
>as.position(x)
>
>y <- rnorm(length(x))
>y
>
>xyplot(y ~ x)
>source("~/h2/library/code/as.position.s")
>xyplot(y ~ as.position(x))
>xyplot(y ~ as.position(x),
>       scale=list(x=list(at=attr(x,"position"), labels=levels(x))))
>xyplot(y ~ as.position(x),
>       scale=list(x=list(at=attr(x,"position"), labels=levels(x))),
>       xlab="x")
>### end example ########
>
>
>
>### as.position.s #########
>as.position <- function(x) {
>  if (is.numeric(x))
>    x
>  else {
>    if (!is.factor(x)) stop("x must be either numeric or factor.")
>
>    if (!is.null(attr(x, "position")))
>      x <- attr(x, "position")[x]
>    else {
>      lev.x <- levels(x)
>      if (inherits(x, "ordered")) {
>        on.exit(options(old.warn))
>        old.warn <- options(warn=-1)
>        if (!any(is.na(as.numeric(lev.x))))
>          x <- as.numeric(lev.x)[x]
>        else
>          x <- as.numeric(ordered(lev.x, lev.x))[x]
>      }
>      else
>        x <- as.numeric(x)
>    }
>  }
>  x
>}
>
>
>## tmp <- ordered(c("c","b","f","f","c","b"), c("c","b","f"))
>## as.numeric(tmp)
>## as.position(tmp)
>## 
>## tmp <- factor(c("c","b","f","f","c","b"))
>## as.numeric(tmp)
>## as.position(tmp)
>## 
>## tmp <- factor(c(1,3,5,3,5,1))
>## as.numeric(tmp)
>## as.position(tmp)
>## 
>## tmp <- ordered(c(1,3,5,3,5,1))
>## as.numeric(tmp)
>## as.position(tmp)
>## 
>## tmp <- c(1,3,5,3,5,1)
>## as.numeric(tmp)
>## as.position(tmp)
>
>### end as.position.s #########
>
>



More information about the R-help mailing list