#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. Я создал функцию, основанную на вашей. смотрите это в моем ответе.