为什么 R 在 r2 < r1 时返回 r1:r2 的向量?

Why R is returning a vector for r1:r2 when r2 < r1?

我正在为一些涉及 R 范围的矩阵编制索引,但我无法获得与在 Matlab 中相同的结果。我可以在 Matlab 中做到这一点: R1:R2 并且当 R2 小于 R1 时它 returns 空矩阵例如: 2:1

在 R 中,当我执行 R1:R2 时,当 R2 小于 R1 时,它 returns 一个向量。例如: 2:1 returns [1] 2 1 在 R 中实现它的正确且简单方法是什么?

也许这样的方法可行:

matlab_like <- function(x,y) unlist(ifelse(y >= x, list(c(x:y)), 0L))
#> matlab_like(1,3)
#[1] 1 2 3
#> matlab_like(3,1)
#[1] 0

Length 易于使用,可以在循环中使用以生成适当的值。这是我能想到的最好最简单的答案:

seq(R1,R2,length = max(0,R2-R1+1))

如何定义您自己的类似 Matlab 的整数序列运算符?

> `%:%` <- function (a, b) if (b >= a) a:b

> letters[2 %:% 5]
[1] "b" "c" "d" "e"
> letters[5 %:% 2]
character(0)
> letters[5 %:% 5]
[1] "e"

约翰