2016-03-29 17 views
0

データの最小要素数をタッチして中央値を変更する関数を記述したいと思います。私のデータは以下のように、ループを終了する条件R

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の値に等しいとき、私は "不可能"と言ってループを終了したい。

これを行うにはエラーが発生しています。誰でもこのことを手伝うことができますか?

おかげ

答えて

2

私は何が起こっているかと思いますが、これをある - changemedian(data,1,1)のケースでは、我々は、すでに中央値よりも大きい最初の要素を、増加しています。したがって、中央値は増加すると変化しないので、ループは決して止まらない。 メジアンは、中央値よりも小さい数字を増やした場合にのみ増加します。


編集:ちょうどラインの前に

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

median2 = median(data1); 
+0

はい、私はちょうどそれが起こるとき、ループを終了します:中央値は、この行を追加繰り返された場合にループを終了するには。ループを終了する際に手伝ってください。私はそれに間違いがある。 2つのループの中央値が等しい場合は、ループを終了します。 – haimen

+0

ループを終了して、文ができないようにしたいだけです。それは私が苦労している場所です – haimen

+0

私の編集を参照してください。これは解決するはずです –