代码之家  ›  专栏  ›  技术社区  ›  Karthik S

不使用排序函数对R中的向量进行排序

  •  0
  • Karthik S  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  5
  •   Ben Bolker    5 年前

    问题在于这一点 (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
    
        2
  •  1
  •   Diego    5 年前
    Sorting <- function(x){
        xs <- rep(0, length(x))
        for(i in 1:length(x)){
              xs[i] = min(x)
              x <- x[x != min(x)]
              }
        xs
    }
    
    Sorting(c(3,1,4,7,2,9))
    [1] 1 2 3 4 7 9
    

    排序是一个带有数字向量参数的函数 x xs ,与相同长度的排序向量 每个组件的 xs (for(i in 1:length(x)){ xs[i] = min(x) ) . 然后,我们从x中移除这样的最小值 x <- x[x != min(x)] } .