No.20205 関数式の結果の出力  【コロン】 2013/09/07(Sat) 14:40

連続する書き込み,申し訳ございません。

自作の関数式の出力方法についてご教授ください。

下記の関数式を作成いたしました。とりあえずデータフレーム形式で結果を出力するようにしています。
> glass<-function(m1, m2, sd2){
+ g<-abs((m1-m2)/sd2)
+ if(g>0.8) s<-"効果大"
+ else if(g>0.5) s<-"中程度の効果"
+ else if(g>0.2) s<-"小さな効果"
+ else s<-"効果無し"
+ result<-data.frame("Glass Δ"=g,"効果量の解釈"=s)
+ return(result)
+ }

> glass(63.30, 47.50, 17.89)
Glass.Δ 効果量の解釈
1 0.883175 効果大
上記の出力を以下のようにするにはどのように関数を書き換えたらよろしいのでしょうか?

Glass Δ= 0.883175
効果量の解釈 = 効果大

できれば データフレーム形式時の"1" という表示は削除したいのですが...。

よろしくお願いいたします。

No.20206 Re: 関数式の結果の出力  【コロン】 2013/09/07(Sat) 14:42

こちらを貼り付けておいた方がよろしいのでしょうか。
glass<-function(m1, m2, sd2){
g<-abs((m1-m2)/sd2)
if(g>0.8) s<-"効果大"
else if(g>0.5) s<-"中程度の効果"
else if(g>0.2) s<-"小さな効果"
else s<-"効果無し"
result<-data.frame("Glass Δ"=g,"効果量の解釈"=s)
return(result)
}
glass(63.30, 47.50, 17.89)

No.20207 Re: 関数式の結果の出力  【青木繁伸】 2013/09/07(Sat) 16:12

ちょっと変わった方法で実装してみましょう(多くの関数で採用されている方法ですが)。
結果をクラスを指定したリストで返し,対応する print メソッドで出力します。
glass <- function(m1, m2, sd2) {
g <- abs((m1 - m2)/sd2)
if (g > 0.8)
s <- "効果大"
else if (g > 0.5)
s <- "中程度の効果"
else if (g > 0.2)
s <- "小さな効果"
else
s <- "効果無し"
result <- list(g = g, s = s)
class(result) <- "glass"
return(result)
}

# glass 用の print メソッド
print.glass <- function(obj) {
cat(sprintf("Glass Δ=%f\n効果量の解釈=%s\n", obj$g, obj$s))
}

glass(63.3, 47.5, 17.89)
ans <- glass(63.3, 47.5, 17.89)
ans
ans$g
ans$s
実行例
> glass(63.3, 47.5, 17.89)
Glass Δ=0.883175
効果量の解釈=効果大
> ans <- glass(63.3, 47.5, 17.89)
> ans
Glass Δ=0.883175
効果量の解釈=効果大
> ans$g
[1] 0.883175
> ans$s
[1] "効果大"

No.20208 Re: 関数式の結果の出力  【コロン】 2013/09/07(Sat) 17:07

青木先生

ありがとうございます。classなど新たな関数の勉強になりました。

No.20209 Re: 関数式の結果の出力  【コロン】 2013/09/07(Sat) 17:11

青木先生

質問をしなければならないのに送信ボタンを押してしまいました。申し訳ございません。

一つだけ教えてください。list(g = g, s = s) はどのようなことでしょうか?

g=g, s=sというのがわかりません。

申し訳ございません。

No.20210 Re: 関数式の結果の出力  【青木繁伸】 2013/09/07(Sat) 20:15

二つの要素を持つリストを作る
? list でオンラインヘルプを参照のこと

簡単に説明すると,

result <- list(g = g, s = s)

なら,result は result$g と result$s という要素から成り立つ

g = g の左辺は,要素の名前。右辺は変数(一般的には式)。要素の名前は変数名と同じである必要はない。

No.20211 Re: 関数式の結果の出力  【コロン】 2013/09/07(Sat) 20:40

青木先生

ありがとうございました。左辺は変数名と同じでなくてもよいこと,承知いたしました。

理解できました。

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