2017-11-10 21 views
0

S3クラスshwehartのオブジェクトのプロットメソッドを作成しようとしています。このプロットにはXiの値が表示され、警告の制限とアクションの制限の行が含まれている必要があります。 私はplot.shewhart(x、y、...)を使ってみました。Rは私にプロットを与えましたが、直線はありませんでした。 誰か助けてくれますか?前もって感謝します。S3対象のRプロットメソッド

aa<-c(1:10) 
bb<-c(127,128,128.5,125.5,129,126.5,129,126,125,130) 
samean<-data.frame(aa,bb) 

class(samean)<-"shewhart" 


plot.shewhart<-function(x){ 
    mu=127 
    sigma=3.4 
    plot(x<-samean[,1],y<-samean[,2], type="b", col="blue", 
     xlim<-c(0,10), ylim<-c(120,140) ) 

    abline(h=mu, col="blue") 
    abline(h=mu+3*sigma/sqrt(100), col="green") 
    abline(h=mu-3*sigma/sqrt(100), col="green") 
} 

plot(samean) 
+0

「機能しなかった」とは、正確に何を意味しますか。あなたの関数を書くのはどこですか?実際にコードを実行できるように、より完全な[再現可能な例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)をサンプル入力データとともに提供する必要があります。 – MrFlick

+0

[mcve]を確認してください。 –

+0

私はこの質問を手伝っても、他の多くの人のように削除しますか?それともそれを維持しますか?私は質問者が削除した質問を手助けするのが好きではありません。 – Gregor

答えて

2

投稿するコードに2つの問題があります。

1)データフレームのようにsameanを使用したい場合 - samean[, 1]のようなものを使用したいが、新しいクラスshewhartのようにしたい。だからあなたはに置き換えますdata.frameクラスを置き換えるには、に拡張します。私たちは、あなたのラインがまだdata.frameある

# class(samean)<-"shewhart" # bad 
class(samean) <- c("shewhart", class(samean)) # good 

この方法を変更し、それがデータフレームのちょうど特殊なタイプです:

class(samean) 
# [1] "shewhart" "data.frame" 

2)関数の引数については、ない<-=を使用しています。これは、plotコマンドの問題です。また、関数の入力にはxという名前が付けられているため、関数内にはxとだけ記述してください。

# plot(x<-samean[,1],y<-samean[,2], type="b", col="blue", 
    xlim<-c(0,10), ylim<-c(120,140) ) # bad 

plot(x = x[,1], y = x[,2], type = "b", col = "blue", 
    xlim = c(0,10), ylim = c(120,140) ) # good 

これらの変更を加えれば、コードはわかりやすく機能します。私は可読性のために書式を変更しましたが、唯一の実際の変更は上記のものです。

aa <- c(1:10) 
bb <- c(127, 128, 128.5, 125.5, 129, 126.5, 129, 126, 125, 130) 
samean <- data.frame(aa, bb) 

class(samean) <- c("shewhart", class(samean)) 

plot.shewhart <- function(x) { 
    mu = 127 
    sigma = 3.4 
    plot(
    x = x[, 1], 
    y = x[, 2], 
    type = "b", 
    col = "blue", 
    xlim = c(0, 10), 
    ylim = c(120, 140) 
) 

    abline(h = mu, col = "blue") 
    abline(h = mu + 3 * sigma/sqrt(100), col = "green") 
    abline(h = mu - 3 * sigma/sqrt(100), col = "green") 
} 

plot(samean) 

enter image description here

それが回答されていることを今、あなたの質問を削除しないでください。

+0

これを独自の関数に使いたい場合は、まず関数UseMethodを使って関数を汎用として登録する必要があります。 'plot'はすでに一般的な関数です。 – MrGumble

+0

あなたの訂正に感謝します。 –

関連する問題