条件退出R中的循环

时间:2016-03-29 17:45:03

标签: r function loops

我想写一个函数来通过触及数据中最小数量的元素来改变中值。我的数据如下,

data = data.frame(name=letters, values = c(0.183487333,0.487690292, 0.510321455,0.616632727, 0.660789818, 0.845322255, 0.867910555, 0.911842909, 0.913312571, 1.017638286, 15.97454546, 16.20765382, 16.27542982, 16.307264, 17.38325527, 17.54139927, 70.08443928, 70.26106764, 75.79405382, 77.72412946, 79.58750724, 84.67373672, 87.04692364, 88.58626037, 94.79392582, 100.0000))
data = data %>% mutate(diff = abs(values - median(values)), rank_diff = dense_rank(diff)) %>% arrange(diff)  

以下是我的功能,

changemedian <- function(data, increase, rows) 
{
  median2 = median(data$value)
  new_median = median2 + increase
  i = 0
  print(data$name[1:rows])
  data1 = data$values
  while(median2<new_median){
    x = median2
    data1[1:rows] = data1[1:rows] + 0.2
    median2 = median(data1)
    i = i + 0.2
  }
  print(paste("values to be changed per name:",i))
  cat("\n")
  print(paste("New Median that could be achieved:" ,median2))
}

当我想将中位数增加1时,我可以调用此函数,我想只使用5个值来changemedian(data,1,5)。代码工作正常。但是当我不能像changemedian(data,1,1)那样实现中位数时,我给出了一个不可能的条件,循环继续运行。当中位数等于先前的中值时,我想循环退出。这里当median2在前一个循环中等于median2值时,我想通过说&#34;不可能&#34;来退出循环。

我遇到错误。有人可以帮我这么做吗?

由于

1 个答案:

答案 0 :(得分:2)

我认为发生的事情是这样的 - 在changemedian(data,1,1)的情况下,我们只增加第一个元素,它已经大于中位数。因此,中位数不会随着增加而改变,并且循环永远不会停止。 只有当你增加一些小于中位数的数字时,中位数才会增加。

编辑:要在重复中位数时退出循环,请添加以下行:

if  ( median(data1) == median2 ) break; 

在行

之前
median2 = median(data1);