在R中使用while语句的问题

时间:2015-12-10 23:01:13

标签: r while-loop

在我的示例中,我想将两个向量合并为一个排序向量。为此我决定使用while循环。这是我的代码:

merge_sort_func <- function(vect1,vect2){
    if((is.numeric(vect1) & is.numeric(vect2)) == FALSE){
        stop("The argument must be numeric!")
    }
    new_vect <- c(vect1,vect2)
    sort_vect <- numeric()
    i <- length(unique(new_vect))
    while(i != 0){
        sort_vect <- c(sort_vect,new_vect[which(x == min(new_vect))])
        new_vect <- new_vect[-which(x == min(new_vect))]
        i <- i-1
    }
    sort_vect
}

但就我而言,它不起作用:

  1. 有时它会错误地排序向量(不按顺序)
  2. 有时会产生此警告:
      

    In min(new_vect) : no non-missing arguments to min; returning Inf

  3. 我认为,我的代码中的主要问题与while语句有关。 你能告诉我(或给我一个暗示)我错在哪里吗?

1 个答案:

答案 0 :(得分:1)

您发布的代码不起作用(x未定义)。我想这就是你想要的。只是一些小的变化:|

merge_sort_func <- function(vect1, vect2) {
    if ((is.numeric(vect1) & is.numeric(vect2)) == FALSE) {
        stop("The argument must be numeric!")
    }
    new_vect <- c(vect1, vect2)
    sort_vect <- numeric()
    i <- length(unique(new_vect))
    while (i != 0) {
        x <- min(new_vect)
        sort_vect <- c(sort_vect, new_vect[which(x == new_vect)])
        new_vect <- new_vect[ - which(x == new_vect)]
        i <- i - 1
    }
    sort_vect
}