2016-03-29 17 views
0

Verilerimdeki minimum öğe sayısına dokunarak medyanı değiştirmek için bir işlev yazmak istiyorum. Benim veri,Bir döngüden çıkmak için koşul 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) 

aşağıdaki gibidir ve aşağıdaki benim fonksiyondur, ben 1 ile ortancasını arttırmak istediğinizde

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)) 
} 

ben bu işlevi çağırabilir ve yapmak sadece 5 değerleri kullanmak istediğinizde changemedian(data,1,5) ile. Kod bunun için iyi çalışıyor. Ama medyanın changemedian(data,1,1) gibi elde edilememesi durumunda, olanaksız bir durum verdiğimde, döngü çalışmaya devam ediyor. Medyan önceki medyan değere eşit olduğunda çıkmak için döngü yapmak istiyorum. Burada medyan2, önceki döngü sırasında medyan2 değerine eşit olduğunda, "mümkün değil" diyerek döngüden çıkmak istiyorum.

Bunu yapmak için hata alıyorum. Bunu yaparken bana kimse yardım edebilir mi?

Teşekkür

cevap

2

Ben neler olduğunu düşünüyorum bu - changemedian(data,1,1) durumunda, sadece zaten ortanca büyüktür birinci elemanı, artan edilmektedir. Böylece medyan bunu artırmaya değişmez ve döngü asla durmaz. Medyan, yalnızca medyandan daha küçük sayıları artırdığınızda artar. Sadece

median2 = median(data1); 
+0

evet ben sadece bu olduğunda döngü çıkmak istiyor satırdan önce

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

:


Düzenleme: Bir medyan bu satırı eklemek tekrarlanır eğer döngü çıkmak için . Döngüden çıkmama yardım edebilir misin? Bununla ilgili hatalarla karşılaşıyorum. İki döngü için medyan değer eşitse, döngüden çıkmak istiyorum. – haimen

+0

Sadece döngüden çıkıp mümkün olmayan bazı ifadeler vermek istiyorum. Bu noktada ben mücadele ediyorum – haimen

+0

Benim düzenleme bakın. Bu –

İlgili konular