2017-01-03 361 views
1

Rで関数を作成することを学んでいるので、線形回帰の残差線をグラフ化する関数を作ろうとしています。私はすでにそれを試して、コードは関数の外で動作しますが、一度関数に入力すると、 'x'と 'y'の長さに誤差があります。ここ は私の関数である。tracebookは、エラーがここで発生したことを示して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)))) 
}` 

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) 

私は、私は長さ()関数を使用して試した各データセットの長さをチェックしましたそれらはすべて一致するので、長さや 'x'や 'y'、あるいはその両方を変更するように見える関数内で何かが起こっています。

誰でもエラーの内容と修正方法を教えていただけますか?ありがとう。

+0

チェック。 – AidanGawronski

+1

まず、プロットを作成していない場合、アブラインを使用することはできません。したがって、まず関数の回帰をプロットする必要があります。 –

+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 [k]、x [k]の代わりにy、xを使ったあなたの予測にあった。しかし、もう少しありました。今

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])))) 
    } 
} 

NAのデータでテスト用

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

enter image description here

関連する問題