2017-01-03 960 views
1

我剛剛學習在R中創建函數,所以我試圖做一個函數來繪製線性迴歸的殘差線。我已經嘗試過了,代碼在函數外部工作,但是一旦我將它全部放入函數中,我會得到'x'和'y'長度不同的錯誤。 這裏是我的功能:R:調試一個函數:'x'和'y'長度不同錯誤

`reslines <- function(x,y) { 
abline(lm(y~x)) 
for(k in 1: length(y)) lines(c(x[k],x[k]), c(y[k], predict(lm(y~x)))) 
}` 

的tracebook表明,這裏發生了錯誤:

6 stop("'x' and 'y' lengths differ") 
5 xy.coords(x, y) 
4 plot.xy(xy.coords(x, y), type = type, ...) 
3 lines.default(c(x[k], x[k]), c(y[k], predict(lm(y ~ x)))) 
2 lines(c(x[k], x[k]), c(y[k], predict(lm(y ~ x)))) 
1 reslines(a, b) 

我檢查設置我使用length()函數嘗試每一個數據的長度,並且它們都匹配,所以函數內部發生了一些似乎改變長度或'x'或'y'或兩者的函數。

任何人都可以告訴我錯誤是什麼以及如何解決它?謝謝。

+0

檢查NA的數據。 – AidanGawronski

+1

首先,如果您沒有繪製陰謀,則不能使用abline,因此,您必須首先繪製迴歸函數 –

+0

'c(x [k],x [k])'是長度爲2,而c(y [k],predict(lm(y〜x)))是長度爲'length(y)+ 1'的向量。另外,不要用循環來繪製多行,而應考慮使用'segments':'segments(x0 = x,y0 = y,y1 = predict(lm(y〜x)))''。 –

回答

0

我想我已經修好了,這不是很容易,主要是你的預測問題是你用y,x而不是y [k],x [k]。但是有一點點:

reslines <- function(x,y) { 
    plot(y~x) 
    abline(lm(y~x)) 
    lm.xy <- lm(y~x) 
    for(k in 1: length(y)) { 
    lines(c(x[k],x[k]), c(y[k], predict(lm.xy, data.frame(x=x[k], y = y[k])))) 
    } 
} 

現在測試

set.seed(123) 
reslines(rnorm(10), rnorm(10)) 

enter image description here

相關問題