2012-11-25 69 views
2

如何找到與R循環的x截距和y截距(全部四個)?在R中查找x截距和y截距

# this will generate an example dataframe mydf 
x <- sin(seq(0,2*pi,0.2) + rnorm(1)) 
y <- cos(seq(0,2*pi,0.2) + rnorm(1)) 

mydf <- data.frame(x,y) 
plot(mydf) 
abline(h=0) 
abline(v=0) 

impression of the loop

目前我有兩個類似功能的嘗試周圍,在北/南/東/西 是鴻溝,尋找最接近的點軸。這是低效率的,並不精確,因爲這點可能很遙遠。

getYintercept <- function(mdf){ 
    R1 <- mdf$y[which.min(subset(mdf, y>0)$y)] # north 
    R2 <- mdf$y[which.min(subset(mdf, y<0)$y)] # south 
    return(rbind(R1,R2)) 
} 

因此,我想插(predictapprox)這一點。 這怎麼能解決最優雅?

回答

2

下面是一個approxfun溶液:

intercepts <- function(x,y) { 
    x.s <- approxfun(x[y<=0], y[y<=0])(0) 
    x.n <- approxfun(x[y>=0], y[y>=0])(0) 
    y.w <- approxfun(y[x<=0], x[x<=0])(0) 
    y.e <- approxfun(y[x>=0], x[x>=0])(0) 

    list(x.s, x.n, y.w, y.e) 
} 

這裏,x.s是南y截距的值x,等等。

+0

不錯的解決方案。它運作良好。一般來說,返回一個列表然後返回一個data.frame會更好嗎?那麼approxfun如何選擇這些值? '?approxfun'頁面說線性模式是標準的,所以它不應該使用所有的北值... –

+0

ahhh ...它使用兩個連續值...現在我明白了。 –

+0

這是正確的,連續值之間的線性插值是默認模式。列表是從函數返回多個值的簡便方法。數據框架也可以工作,但我沒有看到任何優勢。對於這個函數,甚至可以返回一個向量(因爲每個返回值的長度都是1)。 –