不使用排序功能在R中对向量排序

时间:2019-02-08 08:02:59

标签: r for-loop if-statement

我正在尝试编写一个对向量进行排序的函数,但是没有使用R的内置“排序”函数。 我的代码:

sorting <- function(x){
  for(i in 1:length(x)){
    for(j in (i+1):length(x)){
      if(x[i] > x[j]){
        x[c(i,j)] = x[c(j,i)]
      }
    }
  }
  x
}

我得到以下输出:

> x <- c(3,1,4,7,2,9)
> sorting(x)
Error in if (x[i] > x[j]) { : missing value where TRUE/FALSE needed
> 

我知道,当“ IF”条件返回“ NA”而不是TRUE / FALSE时,我们将得到错误提示。

语句是否有问题:

for(j in (i+1):length(x)){

相同的Python代码:

def sorting(a):
    for i in range(len(a)):    
        for j in range(i+1,len(a)):
            if a[i] > a[j]:
                a[i],a[j] = a[j],a[i]

    return a

输出:

sorting([3,1,4,7,2,9])
Out[380]: [1, 2, 3, 4, 7, 9]

在Python中,代码可以正常工作。

有人可以让我知道我的R代码存在的问题。

1 个答案:

答案 0 :(得分:2)

问题出在(i+1)上。当length(x)达到最大值时,j超出范围。我添加了这个:(length(x)-1)

sorting <- function(x){
  for(i in 1:(length(x)-1)){
    for(j in (i+1):length(x)){
      if(x[i] > x[j]){
        x[c(i,j)] = x[c(j,i)] # +1 for this
      }
    }
  }
  x
}

sorting(c(3,1,4,7,2,9))
[1] 1 2 3 4 7 9