No.00846 Rによる正規分布のプロット  【波音】 2006/08/06(Sun) 13:31

実は前から気になっていたのですが,例えば平均が10で標準偏差が5である正規分布をRで描く場合に

> normal<-function(x) dnorm(x,mean=10,sd=5)
> plot(normal,-15,35)

というやり方と

> x<-seq(-15,35,by=0.001)
> plot(x,dnorm(x,mean=10,sd=5),pch=".")

というやり方が考えられます。後者のやり方は納得がいくのですが,前者の場合はnormalという変数の中にどのような値が代入されているのかよく分かりません。

もう少し違う例でy=x^2のような(高校で習ったような)2次関数を描く場合,

> x<-seq(-10,10,by=0.001)
> plot(x,x^2,pch=".")

とすれば描けるのに対して

> y<-function(x) x^2
> plot(y,-10,10)

とした場合にはyにどのような値が代入されているのかが分かりません。plot()で横軸の範囲を指定した時にR側が適当に0.001刻みにy(-10),y(-9.999),y(-9.998),...などと引数に値をいれてくれているのでしょうか?

yにどのような値が代入されているかというよりは,plot(y,-10,10)としたときにどのような処理がされているのかと質問した方が良いのかもしれませんが。。。

No.00848 Re: Rによる正規分布のプロット  【青木繁伸】 2006/08/06(Sun) 14:13

R の help では,plot の第一引数はx
x the coordinates of points in the plot. Alternatively, a single plotting structure, function or any R object with a plot method can be provided.
ということですね。x が関数のときにどのような処理が行われるかは,プロンプトに対して plot だけを入力してみれば,内部で plot.function という関数が生成されてそれによって曲線が描画される仕組みが見えます。

No.00849 Re: Rによる正規分布のプロット  【波音】 2006/08/06(Sun) 15:53

回答ありがとうございます。

plot()の中身を見ていて分からない所があります。随所にif("" %in% "")という分岐が出てきますが,この%in%とはどういう意味なのでしょうか。

Rwikiの単語検索でなんとか見つけた(http://www.okada.jp.org/RWiki/index.php?cmd=read&page=%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9%BB%B2%B9%CD%BC%C2%CE%E3%BD%B8%A1%A7%BF%F4%BC%B0%A4%CE%A5%D7%A5%ED%A5%C3%A5%C8&word=%25in%25)のですが,これによると「xはyの成分である」ということですが意味がよく分かりません。

if("" %in% "")はif(""=="")とは違うのですか?
試しに下のような2つの関数を作って試してみても,どちらも同じ役割を果たしているようにしか見えないのですが,どうなのでしょうか。

myprog<-function(x,y){
if (x %in% y) 0
else 1
}

myprog2<-function(x,y){
if(x==y) 0
else 1
}

No.00850 Re: Rによる正規分布のプロット  【青木繁伸】 2006/08/06(Sun) 19:25

? "%in%"
で,オンラインヘルプが得られます。
オンラインヘルプの最後にある example は,example(foo) みたいにすると実際に実行できます

単純な文字列以外は,? の場合も example の場合も,引用符でくくる必要がありますが。
> example("%in%")

%in%> intersect <- function(x, y) y[match(x, y, nomatch = 0)]

%in%> intersect(1:10, 7:20)
[1] 7 8 9 10

%in%> 1:10 %in% c(1, 3, 5, 9)
[1] TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE
[10] FALSE

%in%> sstr <- c("c", "ab", "B", "bba", "c", "@", "bla",
"a", "Ba", "%")

%in%> sstr[sstr %in% c(letters, LETTERS)]
[1] "c" "B" "c" "a"

%in%> "%w/o%" <- function(x, y) x[!x %in% y]

%in%> (1:10) %w/o% c(3, 7, 12)
[1] 1 2 4 5 6 8 9 10

No.00851 Re: Rによる正規分布のプロット  【波音】 2006/08/06(Sun) 20:07

なるほど,ダブルクォーテーションでくくってあげる必要があったのですね。?%in%ではエラーが出たので,てっきりヘルプがないのかと思っていました。ありがとうございました。

● 「統計学関連なんでもあり」の過去ログ--- 039 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る