识别向量的确切元素是什么

Sh.*_*ent 5 testing r equals intervals or-condition

我有一个x形式的向量:

x=c(601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614,
 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630,
 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646,
 647, 648, 649, 650)
Run Code Online (Sandbox Code Playgroud)

如果length (x) == 50:我想测试(TRUEFALSEx是否精确等于间隔1:50或51:100或101:150或151:200 ....或951:1000中的一个

或者,如果length (x)> 50我想测试(TRUEFALSEx是否精确等于((1:50 U 51:100)或(1:50 U 101:150)或(51:100)组成的区间的并集U 151:200)....)

我的尝试:

all(
    x == c(1:50) | 
    x == c(51:100) | 
    x == c(101:150) | 
    x == c(151:200) | 
    x == c(201:250) | 
    x == c(251:300) | 
    x == c(301:350) | 
    x == c(351:400) | 
    x == c(401:450) | 
    x == c(451:500) | 
    x == c(501:550) | 
    x == c(551:600) | 
    x == c(601:650) | 
    x == c(651:700) | 
    x == c(701:750) | 
    x == c(751:800) | 
    x == c(801:850) | 
    x == c(851:900) | 
    x == c(901:950) | 
    x == c(951:1000)
)
Run Code Online (Sandbox Code Playgroud)

我想优化此代码。

PS:我不是要x这样的问题那样列出元素和区间的频率表。我想知道是否x恰好对应于一个或这些间隔的并集。

Sot*_*tos 5

您可以使用cut,即

unique(cut(x, breaks = seq(0, 1000, by = 50)))
#[1] (600,650]
Run Code Online (Sandbox Code Playgroud)

如果您希望x这些间隔中包含一个布尔值If ,那么您可以这样做,

unique(cut(x, breaks = seq(0, 1000, by = 50))) != ''
#[1] TRUE

#or If you only want to be in 1 group, then as suggested by Ronak,
length(unique(cut(x, breaks = seq(0, 1000, by = 50)))) == 1
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)