[R] Plotting counts vs. intervals for a shingle

David Winsemius dwinsemius at comcast.net
Fri May 8 23:38:06 CEST 2009


On May 8, 2009, at 4:55 PM, Deepayan Sarkar wrote:

> On Fri, May 8, 2009 at 1:30 PM, David Winsemius <dwinsemius at comcast.net 
> > wrote:
>>
>> Took a bit of inspecting, looking at hidden functions, but this  
>> seems to do
>> it:
>>
>> library(lattice)
>>  a <- c(1:10, 5:10)
>>  b <- cbind(c(0,2.5,4.5,6.5), c(5.5,7.5,9.5,11))
>>  c <- shingle(a, b)
>>  summary(c, showValues=FALSE)
>>
>> apply(as.matrix(levels(c)), 1, function(x) length(c[ c>= x[[1]][1]  
>> & c <=
>> x[[1]][2] ]) )
>>
>> #[1]  6  8 10  8
>>
>> "apply" passes a list to the function which requires the "[["  
>> operation
>> before the index. Since you did not create an example that  
>> represents the
>> exceptions, i did not test for any such conditions. (Why do people  
>> not
>> construct proper examples?)
>
> Noting that
>
>> str(levels(c))
> List of 4
> $ : num [1:2] 0 5.5
> $ : num [1:2] 2.5 7.5
> $ : num [1:2] 4.5 9.5
> $ : num [1:2] 6.5 11
> - attr(*, "class")= chr "shingleLevel"
>
> I would suggest the slightly simpler
>
>> sapply(levels(c), function(x) sum(x[1] <= c & c <= x[2]))
> [1]  6  8 10  8

Much more readable. In looking at my trail of failed efforts, I see  
that I came close but failed to realize that I was almost at:

sapply(as.matrix(levels(c)), function(x) length(c[ c>= x[1] & c <=  
x[2] ]) )

... which also succeeds (as does your solution) in producing zeros  
when no elements are in the intervals.

>
>
> -Deepayan

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list