试图找到向量的最小值

时间:2019-01-23 00:02:29

标签: r

我试图用一个函数找到向量的最小值,当我尝试运行它时,第一个向量工作正常,而第二个给出-5而不是-7。

my_min <- function(x){
  x.min<-x[1]
  for (i in 0:length(x)){}
    if (x[i]<x.min)
    {
      x.min<-x[i]
    }
  return(x.min)
}


my_min(c(5,4,7,5,3,2))
my_min(-c(5,4,7,5,3,2))

2 个答案:

答案 0 :(得分:5)

您可以使用min来做到这一点,但是{}循环上的括号for只是一个问题:

my_min <- function(x){
  x.min <- x[1]
  for (i in 1:length(x)){
    if (x[i] < x.min)
    {
      x.min <- x[i]
    }
  }
  return(x.min)
}


my_min(c(5,4,7,5,3,2))
my_min(-c(5,4,7,5,3,2))

您实际上并没有遍历任何内容。另外,R从1开始索引。

答案 1 :(得分:3)

看起来像@mickey回答了您的紧迫问题,但这是重申利用编程语言优势的重要时机。在这种情况下,R具有内置的min()函数,该函数可一次对整个矢量进行运算。如下例所示,对于长度为1e8的向量来说,它比for循环快近30倍,而实际上并没有那么大:

my_min <- function(x){
  x.min <- x[1]
  for (i in 1:length(x)){
    if (x[i] < x.min)
    {
      x.min <- x[i]
    }
  }
  return(x.min)
}

set.seed(42)
vec <- rnorm(1e8)
system.time(my_min(vec))
#>    user  system elapsed 
#>    5.81    0.00    5.94
system.time(min(vec))
#>    user  system elapsed 
#>     0.2     0.0     0.2

reprex package(v0.2.1)于2019-01-22创建