我正在尝试编写一个对向量进行排序的函数,但是没有使用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”而不是TRUE / FALSE时,我们将得到错误提示。
语句是否有问题:
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]
在Python中,代码可以正常工作。
有人可以让我知道我的R代码存在的问题。
答案 0 :(得分:2)
问题出在(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