Я немного удивлен, что для этого нет встроенной функции.
Здесь находится элементарная функция (для результатов lm), использующая тот же общий метод, что и Томми выше. При этом используется метод простой замены для двух линий в форме "y = mx + b", чтобы найти общее пересечение в точке y (y1 = y2; m1 * x + b1 = m2 * x + b2), и решается для x:
Определение функции
# Linear model Intercept function
lmIntx <- function(fit1, fit2, rnd=2) {
b1<- fit1$coefficient[1] #y-int for fit1
m1<- fit1$coefficient[2] #slope for fit1
b2<- fit2$coefficient[1] #y-int for fit2
m2<- fit2$coefficient[2] #slope for fit2
if(m1==m2 & b1==b2) {print("Lines are identical")
} else if(m1==m2 & b1 != b2) {print("Lines are parallel")
} else {
x <- (b2-b1)/(m1-m2) #solved general equation for x
y <- m1*x + b1 #plug in the result
data.frame(x=round(x, rnd), y=round(y, rnd))
}
}
Тест:
line1 <- data.frame(x=c(0,1), y=c(0,2))
line2 <- data.frame(x=c(0,1), y=c(1,3))
line3 <- data.frame(x=c(0,1), y=c(1,5))
lmIntx(lm(line1$y~line1$x), lm(line2$y~line2$x))
[1] "Lines are parallel"
lmIntx(lm(line1$y~line1$x), lm(line1$y~line1$x))
[1] "Lines are identical"
lmIntx(lm(line1$y~line1$x), lm(line3$y~line3$x))
x y
(Intercept) -0.5 -1