如何用R求出两个实数之间的所有整数



问题:如何编写一个接收ab作为输入并返回它们之间所有整数的函数。因此,假设我们有一个名为integers_inbetween的函数,其行为如下,我们应该期待以下示例:

# Returns an array of integers in between a and b
integers_inbetween(1, 4)
[1] 2 3

# Returns an array of integers in between a and b
integers_inbetween(4, 1)
[1] 2 3

# Returns NULL if there are no integers inbetween a and b
integers_inbetween(3.5, 4)
[1] NULL

如何在R中实现这种逻辑?

这个解决方案应该可以工作。我假设函数应该在a > b的情况下工作,如果不工作。按照我写它的方式,如果在四舍五入a == b之后,函数返回NULL

inbetween_integers <- function(a, b) {
a <- round(a)
b <- round(b)
dist_ab <- abs(a-b)
if (dist_ab <= 1)
return(NULL)
if (b < a)
return(seq.int(from = b + 1, length.out = dist_ab - 1))
return(seq.int(from = a + 1, length.out = dist_ab - 1))
}

您可以尝试下面的代码

inbetween_integers <- function(a, b) {
u <- sort(c(a, b))
res <- setdiff(ceiling(u[1]):floor(u[2]), c(a, b))
if (!length(res)) {
NULL
} else {
res
}
}

你会看到

> inbetween_integers(1, 4)
[1] 2 3
> inbetween_integers(4, 1)
[1] 2 3
> inbetween_integers(3.5, 4)
NULL

无论参数的顺序如何,它都能工作。首先,此函数对参数进行排序,然后确定序列中的最小值和最大值(不包括整数边界(,然后根据请求返回序列。

integers_in_between<-function(x,y){
values<-sort(c(x,y))
minimum<-ifelse(ceiling(values[1])==values[1], ceiling(values[1])+1, ceiling(values[1]))
maximum<-ifelse(floor(values[2])==values[2], floor(values[2])-1, floor(values[2]))
if(maximum-minimum<0){
NULL
}else{
minimum:maximum
}
}

最新更新