Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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_Integer - Fatal编程技术网

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

如何用R求两个实数之间的所有整数,r,integer,R,Integer,问题:如何编写一个函数来接收a和b作为输入,并返回它们之间的所有整数。因此,假设我们在之间有一个名为integers\u的函数,其行为类似于此,我们应该期待以下示例: # Returns an array of integers in between a and b integers_inbetween(1, 4) [1] 2 3 及 及 如何在R中实现这种逻辑?这个解决方案应该可以工作。我假设如果a>b,函数应该工作,如果不工作,也应该工作。按照我编写的方式,如果在取整a==b之后,函数返回

问题:如何编写一个函数来接收
a
b
作为输入,并返回它们之间的所有整数。因此,假设我们在之间有一个名为
integers\u的函数,其行为类似于此,我们应该期待以下示例:

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


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

这个解决方案应该可以工作。我假设如果
a>b
,函数应该工作,如果不工作,也应该工作。按照我编写的方式,如果在取整
a==b
之后,函数返回
NULL

inbetween_integers <- function(a, b) {
    a <- round(a)
    b <- round(b)
    if (abs(a - b) <= 1)
        return(NULL)
    if (b < a)
        return(seq.int(from = b + 1, length.out = abs(a - b) - 1))
    return(seq.int(from = a + 1, length.out = abs(a - b) - 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
  }
}

建议:像您那样使用
if/else
是没有用的。只有两种可能的结果,所以你可以:
if(!length(res))return(NULL)
然后就返回
return(res)
@eduardokapp是的,没错,我们可以这样做。你能接受最好的答案吗?
inbetween_integers <- function(a, b) {
    a <- round(a)
    b <- round(b)
    if (abs(a - b) <= 1)
        return(NULL)
    if (b < a)
        return(seq.int(from = b + 1, length.out = abs(a - b) - 1))
    return(seq.int(from = a + 1, length.out = abs(a - b) - 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