首页 > 解决方案 > 创建我自己的排序函数时发生错误参数的长度为零

问题描述

*> 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 时所做的。我不知道是什么原因导致这里的零。

标签: r

解决方案


你的错误在这一行

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

您可以改进此功能。


推荐阅读