★ R: subset あるいは attach の奇妙な振る舞い ★

 100 R: subset あるいは attach の奇妙な振る舞い  sb812109  2003/03/08 (土) 20:21
  101 Re: R: subset あるいは attach の奇妙な振る舞い  青木繁伸  2003/03/09 (日) 10:07
   103 Re^2: R: subset あるいは attach の奇妙な振る舞い  sb812109  2003/03/09 (日) 21:47


100. R: subset あるいは attach の奇妙な振る舞い  sb812109  2003/03/08 (土) 20:21
# subset あるいは,attach の振る舞いに理解し難い点が
# あります。

sex <- c(rep("female", 3), rep("male", 3))
wt <- c(62.3, 41.6, 51.0, 75.6, 84.9, 76.5)
data <- data.frame(sex, wt)
data

female.data <- subset(data, sex=="female")
male.data <- subset(data, sex=="male")

female.data
male.data

# ここまでは,問題は無く,期待通りです。ところが,
# 女性だけのwtの最大値を求めようとすると,

attach(female.data)
max(wt)

# これは,女性のみでwtの最大値ではなく,男性のデータ
# も含んだ全体の最大値を返してきます。
# 何故,女性のみのwtの最大値を返してくれないのでしょう?

     [このページのトップへ]


101. Re: R: subset あるいは attach の奇妙な振る舞い  青木繁伸  2003/03/09 (日) 10:07
> # ここまでは,問題は無く,期待通りです。ところが,
> # 女性だけのwtの最大値を求めようとすると,
>
> attach(female.data)
> max(wt)
>
> # これは,女性のみでwtの最大値ではなく,男性のデータ
> # も含んだ全体の最大値を返してきます。
> # 何故,女性のみのwtの最大値を返してくれないのでしょう?

この段階で,R にとっては wt が二通りあり,探索順序が最初のものを対象に max 関数を作用するからではないでしょうか。
max(wt) の前に rm(wt) をしておくと,wt は female.data の wt を指すようになるので,期待通りのものを返すと思います。

ちなみに,更に続けて
> attach(female.data)
> rm(wt)
> max(wt)
[1] 62.3
> wt
[1] 62.3 41.6 51.0
> attach(male.data)
> wt
[1] 75.6 84.9 76.5
となったりします。

     [このページのトップへ]


103. Re^2: R: subset あるいは attach の奇妙な振る舞い  sb812109  2003/03/09 (日) 21:47
なるほど,vectorと同じ変数名がdata.frameにあった場合,vectorが優先されると云うわけですね。せめて警告ぐらい出して呉れればいいのに。

青木先生有難うございました。

     [このページのトップへ]


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