在R中创建排序函数

时间:2015-07-13 14:45:54

标签: r

我正在尝试在R中编写排序函数 我知道有一个sort()功能可以让事情变得简单。但我目前正在学习R并想尝试编写这个函数,这将有助于我理解R语言的循环,功能。以下是我的尝试。

我已输入x <- c(6,4,2,7),排序后应该成为x = (2,4,6,7)

myx<-function(x)
for(i in length(x))
 {
   if(x[i]>x[i+1])
    {
      tmp<-x[i]
      x[i]<-x[i+1]
      x[i+1]<-tmp
    } 
  break
 }

我知道我在编程方面表现不佳,但希望能在你的帮助下改进它。 谢谢你纠正我。

1 个答案:

答案 0 :(得分:3)

您的代码存在一些语法问题。首先,你做了for (i in length(x))而不是for (i in 1:length(x))的常见错误;前者评估为for (i in 4),而您最有可能需要for (i in 1:4)。但是,由于您在代码中调用了x[i + 1],因此您希望将循环范围修改为for (i in 1:(length(x)-1)),否则会出现越界错误。此外,(一般来说)对象不会通过R函数中的引用进行修改,因此您需要在函数末尾隐式(x)或显式(return(x))返回结果。

在概念层面,正如@ johnny838的评论所指出的那样,你的算法必须多次应用以获得完全排序的向量。试着尽可能地坚持上面的代码,这是让它工作的一种方法:

myx <- function(x) {
  for (i in 1:(length(x) - 1)) {
    if (x[i] > x[i+1]) {
      tmp <- x[i]
      x[i] <- x[i+1]
      x[i+1] <- tmp
    }
  }
  x
}
##
sortx <- function(x) {
  while (is.unsorted(x)) {
    x <- myx(x)
  }
  x
}
##
R> x
#[1] 6 4 2 7
R> sortx(x)
#[1] 2 4 6 7