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

On Fri, May 8, 2009 at 1:30 PM, David Winsemius <dwinsem...@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

______________________________________________
R-help@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.

Reply via email to