Вы можете вручную рассчитать наклоны каждой линии.
Уравнение линии задается
y − y1 = grad*(x − x1)
, где grad
рассчитывается по изменению у деленному на изменение х
Мы можем произвести уравнения для каждой строки с помощью двух точек из каждая строка в сюжете.
f2 <- function(xnew, X=x, Y=y) {
id0 <- findInterval(xnew, X, rightmost=T)
id1 <- id0 + 1
grad <- (Y[id1] - Y[id0])/(X[id1] - X[id0])
Y[id0] + grad* (xnew - X[id0])
}
f2(x)
#[1] 100 300 500 1500 2500 3500 4330 6703
f <- approxfun(x, y=y) # bunks
f(seq(1900, 2000, length.out = 10))
# [1] 100.0000 174.0741 248.1481 347.6190 574.0741 1777.7778 2333.3333 3277.7778 NA NA
f2(seq(1900, 2000, length.out = 10))
# [1] 100.0000 174.0741 248.1481 347.6190 574.0741 1777.7778 2333.3333 3277.7778 NA NA
Если вы хотите экстраполировать, используя конечный наклон, вы можете сделать это, добавив all.in=TRUE
аргумент в findInterval
.
С учетом этого approxfun
делает это лучше & проще!
https://www.mathsisfun.com/algebra/line-equation-2points.html – user20650
@ user20650 Мне хорошо известно, как это сделать вручную. Возможно, я должен был быть более конкретным: есть ли функция, которая делает это для меня? – theforestecologist
Извинения, мой комментарий был слишком коротким. Решение 'approxfun' на кушетке ниже - это, безусловно, путь, но вы можете легко запрограммировать уравнения для строк, указанных в ссылке. – user20650