【问题标题】:Problems with usage of while statement in RR中while语句的使用问题
【发布时间】:2016-03-16 18:18:24
【问题描述】:

在我的示例中,我想将两个向量合并为一个排序向量。为此,我决定使用 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

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

【问题讨论】:

  • 什么阻止你使用 sort(new_vect)
  • 现在我正在学习 R(loops) 的基础知识。所以现在我想构建没有 sort()、order() 等的程序。
  • 学习任何语言的基本原则是不要重新发明轮子。排序是有充分理由的。
  • 也可以说“学习语言的基本原则是边做边学”。还有“太阳底下没有新鲜事”。我看不出这种方法有什么问题。他没有尝试对向量进行排序。他正在尝试编写代码来对向量进行排序。有很大的不同。

标签: r while-loop


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    相关资源
    最近更新 更多