R语言中气泡排序代码中的错误消息
我在R语言上做了一些编程工作来进行冒泡排序。有时它可以完美地工作,没有任何错误消息,但有时它会显示“if(x[i]>x[i+1]){:参数长度为零的错误”。有人能帮我检查它有什么问题吗?我在下面附上了我的代码R语言中气泡排序代码中的错误消息,r,bubble-sort,R,Bubble Sort,我在R语言上做了一些编程工作来进行冒泡排序。有时它可以完美地工作,没有任何错误消息,但有时它会显示“if(x[i]>x[i+1]){:参数长度为零的错误”。有人能帮我检查它有什么问题吗?我在下面附上了我的代码 example <- function(x) { n <- length(x) repeat { hasChanged <- FALSE n <- n - 1 for(i in 1:n) { if ( x[i] >
example <- function(x) {
n <- length(x)
repeat {
hasChanged <- FALSE
n <- n - 1
for(i in 1:n) {
if ( x[i] > x[i+1] ) {
temp <- x[i]
x[i] <- x[i+1]
x[i+1] <- temp
hasChanged <- TRUE
cat("The current Vector is", x ,"\n")
}
}
if ( !hasChanged ) break;
}
}
x <-sample(1:10,5)
cat("The original Vector is", x ,"\n")
example(x)
example发生错误的原因是您在迭代减少n
。根据原始向量的顺序(或缺少顺序),n
可以在最后一次更改后达到值1。在这种情况下,在下一次迭代步骤中进一步减少n
可以解决值x[0]
,未定义
只要稍加修改,您的代码就可以正常工作,而不会显示错误消息。请尝试替换该行
if ( !hasChanged ) break;
与
基本上,您有两个终止条件:要么在上一次迭代中没有任何更改,要么n
等于1。在这两种情况下,下一次迭代都不会更改向量,因为它已经排序
顺便说一句,在R编程中,命令末尾不需要分号。解释器允许/忽略分号,但它会使代码混乱,不被认为是好的编程风格
希望这能有所帮助。发生错误是因为您在迭代减少n
。根据原始向量的顺序(或缺少顺序),n
可以在最后一次更改后达到值1。在这种情况下,在下一次迭代步骤中进一步减少n
可以解决值x[0]
,未定义
只要稍加修改,您的代码就可以正常工作,而不会显示错误消息。请尝试替换该行
if ( !hasChanged ) break;
与
基本上,您有两个终止条件:要么在上一次迭代中没有任何更改,要么n
等于1。在这两种情况下,下一次迭代都不会更改向量,因为它已经排序
顺便说一句,在R编程中,命令末尾不需要分号。解释器允许/忽略分号,但它会使代码混乱,不被认为是好的编程风格
希望这能有所帮助。您是否考虑过使用回溯
来确定哪个函数调用获得了不正确的输入?您还应该去掉那些无用的空行。您是否考虑过使用回溯
来确定哪个函数调用获得了不正确的输入?您还应该去掉那些无用的EMPTY行。+1尽管毫无价值,但在修复代码时的最小更改并不是修复此问题的最佳方法。更好的方法是在以后减少n
;但这需要更大的重写。+1尽管毫无价值,但在修复代码时的最小更改并不是修复此问题的最佳方法。更好的方法是在以后减少n
;但这需要更大的重写。