Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R语言中气泡排序代码中的错误消息_R_Bubble Sort - Fatal编程技术网

R语言中气泡排序代码中的错误消息

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] >

我在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] > 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
;但这需要更大的重写。