Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 检查一个数字是否介于其他两个数字之间_R_Range - Fatal编程技术网

R 检查一个数字是否介于其他两个数字之间

R 检查一个数字是否介于其他两个数字之间,r,range,R,Range,我正在寻找一个函数,验证一个数字是否介于其他两个数字之间。我还需要控制是否需要严格比较(a 我知道dplyr中的函数between()。但是,我必须知道上下数字 MyNumber = 8 First = 2 Second = 10 # This will return TRUE between(MyNumber, lower = First, upper = Second) # But this will return FALSE between(MyNumber, lower = Sec

我正在寻找一个函数,验证一个数字是否介于其他两个数字之间。我还需要控制是否需要严格比较(a 我知道
dplyr
中的函数
between()
。但是,我必须知道上下数字

MyNumber = 8
First = 2
Second = 10
# This will return TRUE
between(MyNumber, lower =  First, upper =  Second)
# But this will return FALSE
between(MyNumber, lower =  Second, upper =  First)
# This will return TRUE. I want it to return FALSE
First = 8
between(MyNumber, lower =  First, upper =  Second)
我需要一个返回
TRUE
的函数,无论顺序如何。

类似于:

between2 <- function(number,bounds) { number > min(bounds) & number < max(bounds)} 
between2(8, c(2,10))
[1] TRUE
between2(8, c(10,2))
[1] TRUE

你可以用一个简单的算术:

between <- function(number, first, second) { (first - number) * (second - number) < 0 }

您可以将%中的
%与
功能一起使用,只要您现在
第一个
最后一个

first <- 2
last <- 10
number <- 8

number %in% first:last 
[1] TRUE

first <- 10
last <- 2
number <- 8
number %in% first:last
[1] TRUE


first <- 10
last <- 12
number <- 8
number %in% first:last
[1] FALSE

first <- 12
last <- 10
number <- 8
number %in% first:last
[1] FALSE
你怎么了

f_between <- function (num, L, R) num>=min(L,R) & num<=max(L,R)

f_between(8, 2, 10)
#[1] TRUE
f_between(6, 6, 10)
#[1] TRUE
f_between(2, -10, -2)
#[1] FALSE
f_between(3, 5, 7)
#[1] FALSE

f_between=min(L,R)&numThanks。奇怪的是,没有“自然”函数能做到这一点。也许有,但有时构建函数比寻找包更容易:)很好:)
@Niek修复了这个部分,它不能完成我需要的工作。参见上面的示例我认为这是最好的方法,它是即时的,可以让您轻松处理
L
中的
NA
R
中的
NA.rm=T
。在其他失败的地方,包括我的。
first <- 2
last <- 10
number <- 8

number %in% first:last 
[1] TRUE

first <- 10
last <- 2
number <- 8
number %in% first:last
[1] TRUE


first <- 10
last <- 12
number <- 8
number %in% first:last
[1] FALSE

first <- 12
last <- 10
number <- 8
number %in% first:last
[1] FALSE
my_between <- function(n, f, l, strict = FALSE) {
  if (!strict) { 
    n %in% f:l # if strict == FALSE (default)
  } else {
    n %in% (f+1):(l-1) # if strict == TRUE 
  }
}

my_between(8, 2, 10)
f_between <- function (num, L, R) num>=min(L,R) & num<=max(L,R)

f_between(8, 2, 10)
#[1] TRUE
f_between(6, 6, 10)
#[1] TRUE
f_between(2, -10, -2)
#[1] FALSE
f_between(3, 5, 7)
#[1] FALSE