使用循环查找向量的最小值而不使用min()或sort()函数

时间:2013-02-14 23:46:32

标签: r function loops

这就是我所拥有的,但显然我错了,因为它不起作用: - \

set.seed(1)    
x <- runif(25)

sort<-function(x) {
   for(last in length(x):2) {
      for (first in 1: (last-1)) {
         save<-x[first]
         x[first]<-x[first + 1]
         x[first+1]<-save
      }
   }
   return(x)
}

1 个答案:

答案 0 :(得分:1)

考虑算法。一种选择是以向量的第一个元素作为目标开始,然后将其与第二个元素进行比较。如果秒小于目标,则将target设置为第二个元素。对于元素3到n,使用target重复此比较,其中n是向量的长度。

findMin <- function(x) {
  minX <- x[1] ## set target to first element of `x`
  for (i in (seq_along(x[-1]) + 1)) { ## i take values 2, 3, ..., length(x)
    if(x[i] < minX) ## do comparison with current target
      minX <- x[i]  ## if element i is smaller than target, update target
  }
  minX
}

> set.seed(1)
> vec <- runif(20)
> min(vec)
[1] 0.06178627
> findMin(vec)
[1] 0.06178627

相当为什么你想要这样做是超出我的,结果是愚蠢,低效的R代码。但是(我认为)这可以做你想要的,至少你Q的标题要求。