2016-03-16 3 views
-1

Я прохожу через последовательность от 1 до 1,9 с шагом 0,1, чтобы найти эти значащие позиции в моих данных (datapositions1). Однако при прохождении цикла значение «1.7» не подбирается, хотя оно определенно находится в данных. Однако, если я использую последовательность (1, 1.7, by = 0.1), то она снова забирает «1.7» & незнакомца, если я использую последовательность (1.1, 1.9, = 0,1), тогда она не поднимает «1.7 "или" 1,8 ".В R, используя для цикла seq(), получая странные результаты/поведение

Snippit моих данных:

name position value 
Name A  1.8 458.77011494 
Name A  3.3 352.10734463 
Name A  1.7 167.26923077 
Name A  1.5 14.19756839 
Name A  3.0 96.47292419 
Name A  1.9 636.25490196 
Name A  1.7 1.81479312 
Name A  1.2 130.94444444 
Name A  1.6 43.66501241 
Name B  1.2 86.40421456 
Name B  1.1 48.13294798 
Name B  1.0 3.28143556 
Name C  1.7 460.53846154 
Name C  1.8 501.41545894 
Name C  1.0 112.03095752 
Name C  1.7 216.39130435 

Функция Я использую:

Average= function(){ 
    df = data.frame() 
    for (i in seq(1, 1.9, 0.1)){ 
    #print(i) 
    #b = datapositions1[c(datapositions1$position == 1.7),] 
    #print(b) 
    p = datapositions1[c(datapositions1$position == i),] 
    print(p) 
    df = rbind(df, data.frame(p)) 
    } 
df 
} 
Average() 

Кроме того, в приведенном выше, где я использовал код «б» она всегда возвращает правильные данные при использовании " 1.7 ", тогда как" p ", используя" i ", теряет данные" 1.7 ".

Это результат «p» потери «1.7» данных.

497 Name A  1.6 60.997704 
543 Name C  1.6 146.058824 
544 Name C  1.6 163.133739 
[1] 1.7 
[1] name position  value 
<0 rows> (or 0-length row.names) 
[1] 1.8 
    name position  value 
42 Name A  1.8 20.614468 
43 Name B  1.8 49.724638 
89 Name A  1.8 101.725367 

Любой посоветуйте пожалуйста :)

+0

Вероятно, проблема с точностью с плавающей точкой. – joran

ответ

2

Я думаю, что у меня есть текущее решение.

Я прочитал это в документации .. «Вторая форма генерируется от + by, ... до значения последовательности, меньшей или равной которой. Указание на - от и напротив противоположных знаков Обратите внимание, что вычисленное конечное значение может идти только за пределы, чтобы допускать ошибку округления, но усекается до. («Только за пределами» составляет до 1 -10 раз абс (от-до).) «

я заметил, что это может быть округлением вопрос и о том, что код след может делать что-то вроде:

a+=0.1 
> 0.1 
a+=0.1 
> 0.2000000002 

Значение «я» никогда не будет равняться тому, что представлено в го e стол. Поэтому использование:

i = as.character(i) 

Показалось, чтобы решить эту проблему!

Смежные вопросы