Аргумент ошибки нулевой длины возникает при создании моей собственной функции сортировки

#r

#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, когда я ее запускаю. Я не знаю, что здесь вызывает ноль.

Комментарии:

1. Я удалил все знаки продолжения » » из вашего кода, чтобы мы могли легко вставить его в R и запустить. Публикация вырезанного и вставляемого кода — хорошая идея при переполнении стека.

Ответ №1:

 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))
}
  

Я просмотрел больше о сортировке онлайн, и это сводный способ сортировки.

Ответ №2:

ваша ошибка в этой строке

 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. О, Иисус. Спасибо. Но после того, как я это сделал, становится ясно, что это не своего рода из-за того, как я это написал. Я все еще борюсь .

2. вы хотите отсортировать вектор?

3. Да, я хочу отсортировать вектор в порядке возрастания.

4. Я создал функцию, основанную на вашей. смотрите это в моем ответе.