[R] levels values of cut()

Prof Brian Ripley ripley at stats.ox.ac.uk
Sat Aug 9 17:45:51 CEST 2008


On Sat, 9 Aug 2008, baptiste auguie wrote:

> Thank you all for the precious tips. For memory I've made the following 
> wrapper function for this. I wonder whether a short note on these regular 
> expressions could be useful on the help page of cut().

Already there in R-devel ....

>
>
>> cutIntervals <- function(x, ...){
>> 	dotArgs <- unlist(c(...))
>> 	if( any(names(dotArgs) == "labels")) stop("labels cannot be 
>> specified,  use cut instead")
>>
>> 	cut.fact <- levels(cut(x,labels=NULL, ...))
>> 	# tip from Brian Ripley
>> 	lims <- matrix(nrow=length(cut.fact), ncol=2)
>> 	lims[,1] <- as.numeric( sub("\\((.+),.*", "\\1", cut.fact) )
>> 	lims[,2] <- as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", cut.fact) )
>> 	# alternatively (Stephen Tucker)
>> 	 # library(gsubfn)
>> 	 # lims <- t(strapply(cut.fact,"([0-9.]+),([0-9.]+)",
>> 	 # 						function(...) 
>> as.numeric(c(...)),backref=-2,simplify=TRUE))
>> 	lims
>> }
>> 
>> cutIntervals(1:5, 3)
>
>
> Many thanks,
>
> baptiste
>
> On 9 Aug 2008, at 11:12, Prof Brian Ripley wrote:
>
>> On Sat, 9 Aug 2008, baptiste auguie wrote:
>> 
>>> Dear list,
>>> 
>>> I have the following example, from which I am hoping to retrieve numeric 
>>> values of the factor levels (that is, without the brackets):
>>> 
>>>> x <- seq(1, 15, length=100)
>>>> y <- sin(x)
>>>> my.cuts <- cut(which(abs(y) < 1e-1), 3)
>>>> levels(my.cuts)
>>> 
>>> hist() does not suit me for this, as it does not necessarily respect the 
>>> number of breaks.
>>> 
>>> getAnywhere hasn't got me very far: I cannot seem to find a readable code 
>>> for the built-in cut function in the base library. I think getMethod 
>>> should do it but I don't understand the arguments to pass.
>> 
>> Not getMethod (that's for S4 methods).  Just type cut.default at the R 
>> prompt.
>> 
>> However, try
>> 
>> example(cut)
>> foo <- levels(cut(aaa, 3))
>> lims <- matrix(nrow=length(foo), ncol=2)
>> lims[,1] <- as.numeric( sub("\\((.+),.*", "\\1", foo) )
>> lims[,2] <- as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", foo) )
>> 
>> -- 
>> Brian D. Ripley,                  ripley at stats.ox.ac.uk
>> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
>> University of Oxford,             Tel:  +44 1865 272861 (self)
>> 1 South Parks Road,                     +44 1865 272866 (PA)
>> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>
> _____________________________
>
> Baptiste Auguié
>
> School of Physics
> University of Exeter
> Stocker Road,
> Exeter, Devon,
> EX4 4QL, UK
>
> Phone: +44 1392 264187
>
> http://newton.ex.ac.uk/research/emag
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


More information about the R-help mailing list