興味深い方法であなたのデータをマングルすることができました。あなたがそれを混乱させる前にairquality
で始まる。 (そしてないattach()
行ってください - それは混乱/不要、時には危険なのです。)
str(airquality)
'data.frame': 153 obs. of 6 variables:
$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
$ Month : int 5 5 5 5 5 5 5 5 5 5 ...
$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
あなたは
airquality[2:4] <- apply(airquality[2:4], 2,
function(x) x /airquality[1])
を実行した後、あなたが
'data.frame': 153 obs. of 6 variables:
$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
$ Solar.R:'data.frame': 153 obs. of 1 variable:
..$ Ozone: num 4.63 3.28 12.42 17.39 NA ...
$ Wind :'data.frame': 153 obs. of 1 variable:
..$ Ozone: num 0.18 0.222 1.05 0.639 NA ...
$ Temp :'data.frame': 153 obs. of 1 variable:
..$ Ozone: num 1.63 2 6.17 3.44 NA ...
$ Month : int 5 5 5 5 5 5 5 5 5 5 ...
$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
または
sapply(airquality,class)
## Ozone Solar.R Wind Temp Month Day
## "integer" "data.frame" "data.frame" "data.frame" "integer" "integer"
を取得します
つまり、今ではより安全だ列airquality[,1]
ではなく、airquality[1]
(ベクターによる除算ではなく、長さ1のリスト...)一般的に
airquality[,2:4] <- apply(airquality[,2:4], 2,
function(x) x/airquality[,1])
matplot(x= airquality[,1], y= as.matrix(airquality[,-1]))
によって1文字と除算を変更
rm(airquality) ## clean up
[, ...]
インデックスを使用するのではなく、[]
データフレームの列を参照するためにインデックスを作成しています...
素敵な答えです。おそらく、 'apply'は' matrix'オブジェクトと 'array'オブジェクトのためのものであると強調すべきでしょう。ここで 'airquality'は' data.frame'(したがって 'list')なので、正しい関数は' lapply'です。あるいは、最初にオブジェクトを 'matrix'に強制することもできます(ここでは' matplot'を呼び出すことが目的です)。 – nicola