Сортировка вектора в R без использования функции сортировки - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь написать функцию для сортировки вектора, но без использования встроенной функции R сортировки.Мой код:

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' вместо ИСТИНА / ЛОЖЬ.

Есть ли проблема с оператором:

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]

InPython, код работает нормально.

Может кто-нибудь сообщить мне проблему с моим кодом R.

1 Ответ

0 голосов
/ 08 февраля 2019

Проблема с этим (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...