R:追加問題の解答

R:追加問題の解答
新納浩幸
問題(1)の解答
player
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
HR
18
17
14
8
6
1
24
18
2
1
5
1
1
4
0
0
0
0
0
50
12
RBI
56
53
58
42
52
8
67
73
3
8
37
6
7
11
3
2
0
2
1
107
33
AVG
242
306
314
244
257
219
281
298
208
233
310
228
277
220
400
118
250
261
188
334
318
df ← read.table(”datafile”,header=T)
(問題1) 上記データをファイルに保存して、そのファイルから上記データを
data.frame として読み込め。
問題(2)の解答
(問題2) itm は "HR" か "RBI" か "AVG" の値をとるとする。
問題1で作った data.frame と itm を入力し、その
平均 itm 数、最高 itm 数、最低 itm 数、最高 itm 数をもつ選手、
の4組を取り出す関数 bunseki を作成せよ。
ただし itm の入力がない場合は itm="AVG" として処理するようにせよ。
例えば、 itm="HR" なら、
8.666667, 50, 0, T
の4組を返す。この4組のデータ構造は何でも良い。
bunseki <- function(df,itm="AVG") {
ids <- which(df[itm] == max(df[itm]))
lt <- list(mean=mean(df[itm]),max=max(df[itm]),
min=min(df[itm]),maxplayer=df[ids[1],]["player"])
lt
}
問題(2)の別解答
多くの人は attach を使っていました。
attach を使うと itm を文字列にしなくてすみます。
bunseki3 <- function(df,itm=AVG) {
attach(df);
ids <- which(itm == max(itm))
lt <- list(mean=mean(itm),max=max(itm),
min=min(itm),maxplayer=player[ids[1]])
lt
}
which の利用例
> x ← 10:20
>x
[1] 10 11 12 13 14 15 16 17 18 19 20
> y ← which(x %% 2 == 0)
>y
[1] 1 3 5 7 9 11
> x[y]
[1] 10 12 14 16 18 20
>
その他
関数はファイル( bunseki.r )に書いて、それを
> source(”bunseki.r”)
>
と読み込んで使うのが普通です。