我想创建一个单一的区间,而不使用 cut
函数。 例如,给定整数 a
和 b
区间 (a,b]
可以通过调用 cut(c(a, 2 * b - a), 2)[1]
:
a <- 2.10
b <- 2.15
intervals = cut(c(a, 2 * b - a), 2)
intervals[1]
#> [1] (2.1,2.15]
#> Levels: (2.1,2.15] (2.15,2.2]
如何创建 (a,b]
没有这个变通方法?我一直找不到任何关于间隔的文档,而不是关于 cut
和 findInterval
函数。
好吧--我承认我还没有完全理解这一点的全部用处,但这里有一个你可以做的建议。
由于 cut
只不过是字符向量,你可以用你的变量来构造它们。a
和 b
的输出中是否存在一个特定的兴趣区间,并使用它们来测试在 cut
.
例子:首先做一些区间来搜索。
set.seed(1)
mydata=sample(1:100,20)
mycutintervals=cut(mydata,7)
mycutintervals
现在构建感兴趣的区间来检查是否存在。
make_interval=function(x,y) paste0("(",x,",",y,"]")
a=19
b=32
# is interval from a to b present?
make_interval(a,b) %in% mycutintervals
# [1] TRUE
c=50
# what about interval from a to c?
make_interval(a,c) %in% mycutintervals
# [1] FALSE
也许下面的一个选项可以帮助你
> cut(c(a,b),range(c(a-.Machine$double.eps,b)))
[1] (2.1,2.15] (2.1,2.15]
Levels: (2.1,2.15]
或
> na.exclude(cut(c(a,b),range(a,b)))
[1] (2.1,2.15]
attr(,"na.action")
[1] 1
attr(,"class")
[1] exclude
Levels: (2.1,2.15]