创建我自己的排序函数时,错误参数的长度为零

时间:2019-03-10 12:20:51

标签: r

*> csort <- function(c){
     i<-1
     for (i in 1:length(c)-1) {
         j <- i+1
         for (j in 2:length(c)) {
             if(c[i] >= c[j])c[c(i,j)] <- c[c(j,i)]
             j = j + 1
         }
         i = i + 1
     }
 }
> csort(a)
Error in if (c[i] >= c[j]) c[c(i, j)] <- c[c(j, i)] : 
argument is of length zero*

这是我运行RStudio时所做的。我不知道是什么原因导致零。

2 个答案:

答案 0 :(得分:0)

您的错误在此行

for (i in 1:length(c)-1)

并且应该是

for (i in 1:(length(c)-1))

因为$:$运算符先于$-$。

一个例子是

1:(5-1)
#[1] 1 2 3 4
1:5-1
#[1] 0 1 2 3 4

所以索引值为零的错误发生了。

csort <- function(d){

  for (i in 1:(length(d)-1)) {

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

     }

  }
return(d)
}
d<-c(5:1,-1:3,-9,-3,10,9,-20,1,20,-6,5)
any((csort(d)==sort(d))==F)
#[1] FALSE

您可以改善此功能。

答案 1 :(得分:0)

csort <- function(c){
  p <- 1
  povit <- c[1]
  c <- c[-1]
  left <- c()
  right <- c()
  left <- c[which(c <= povit)]
  right <- c[which(c > povit)]
  if(length(left) > 1){
  left <- csort(left)
  }
  if(length(right) > 1){
    right <- csort(right)
  }
  return(c(left ,povit,right))
}

我查看了有关在线排序的更多信息,这是一种关键的排序方式。