繁体   English   中英

在R中创建排序函数

[英]Creating a sort function in 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
 }

我知道我不擅长编程,但希望能在你的帮助下改进它。 谢谢你纠正我。

您的代码存在一些语法问题。 首先,你做了一个常见的错误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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM