Когда я создаю кадр данных из числовых векторов, R, кажется, усекает значение ниже точности, которая мне требуется в моем анализе:
data.frame(x=0.99999996)
возвращает 1
(* но см. Обновление 1)
Я застрял при установке spline(x,y)
, и два значения x установлены в 1 из-за округления при изменении y.Я мог бы взломать это, но я бы предпочел использовать стандартное решение, если оно доступно.
пример
Вот пример набора данных
d <- data.frame(x = c(0.668732936336141, 0.95351462456867,
0.994620622127435, 0.999602102672081, 0.999987126195509, 0.999999955814133,
0.999999999999966), y = c(38.3026509783688, 11.5895099585560,
10.0443344234229, 9.86152339768516, 9.84461434575695, 9.81648333804257,
9.83306725758297))
Следующее решение работает, но я бы предпочел что-то менее субъективное:
plot(d$x, d$y, ylim=c(0,50))
lines(spline(d$x, d$y),col='grey') #bad fit
lines(spline(d[-c(4:6),]$x, d[-c(4:6),]$y),col='red') #reasonable fit
Обновление 1
* С момента публикации этого вопроса я понимаю, что это будетвозвращает 1
, даже если фрейм данных все еще содержит исходное значение, например,
> dput(data.frame(x=0.99999999996))
возвращает
structure(list(x = 0.99999999996), .Names = "x", row.names = c(NA,
-1L), class = "data.frame")
Обновление 2
Послеиспользуя dput для публикации этого примера набора данных и некоторых указателей из Dirk, я вижу, что проблема не в усечении значений x
, а в ограничении числовых ошибок в модели, которую я использовал для вычисления y
.Это оправдывает отбрасывание нескольких эквивалентных точек данных (как в примере с красной линией).