首页 > 解决方案 > 如何在 R 中手动构建订单函数?

问题描述

我正在尝试在 R 中构建自己的排序函数,它可以排序长度为 2 的向量。

这是我被要求完成的问题...编写一个函数,该函数接受一个x长度为 2 的参数,并返回 的有序值x。也就是说,如果x_2<x_1,你的函数应该返回c(x_2,x_1),否则它应该返回x。(编写你自己的函数。不要使用内置的函数顺序)这是我试图使用的代码

x = (c(3,1))
orders = function(x){
  for(i in 1:length(x))
  if(x[i+1] < x[i]){
    print(c(x[i+1], x[i]))} else{
      (return(x))
  }}


orders(x)

但它给了我这个错误的输出

[1] 1 3
Error in if (x[i + 1] < x[i]) { : missing value where TRUE/FALSE needed

这是正确的答案,但我不确定如何修复错误,有什么建议吗?

标签: r

解决方案


既然你说x只有长度二,为什么不这样:

my_order <- function(x) {
    if (x[1] < x[2]) {
        return(x)
    } else {
        return(rev(x))
    }
}

如果第一个元素小于第二个元素,则返回原始向量;否则,用 颠倒顺序rev()

自己尝试一下:

x1 <- c(3,1)
x2 <- c(2,3)
x3 <- c(101, -1)

my_order(x1)
my_order(x2)
my_order(x3)

推荐阅读