При создании моей собственной функции сортировки возникает аргумент ошибки нулевой длины - PullRequest
0 голосов
/ 10 марта 2019
*> 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 голосов
/ 10 марта 2019
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))
}

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

0 голосов
/ 10 марта 2019

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

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

Вы можете улучшить эту функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...