Sei riuscito a manipolare i dati in modo interessante. A partire da airquality
prima di scherzare con esso. (E per favore non attach()
- è inutile e talvolta pericolose/confusa.)
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 ...
Dopo aver fatto
airquality[2:4] <- apply(airquality[2:4], 2,
function(x) x /airquality[1])
si ottiene
'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 ...
o
sapply(airquality,class)
## Ozone Solar.R Wind Temp Month Day
## "integer" "data.frame" "data.frame" "data.frame" "integer" "integer"
ovvero you have data frames embedded within your data frame!
rm(airquality) ## clean up
Ora cambia un carattere e dividere per la colonna airquality[,1]
piuttosto che airquality[1]
(dividere per un vettore, non un elenco di lunghezza ...)
airquality[,2:4] <- apply(airquality[,2:4], 2,
function(x) x/airquality[,1])
matplot(x= airquality[,1], y= as.matrix(airquality[,-1]))
In generale è più sicuro utilizzare l'indicizzazione [, ...]
anziché l'indice []
per fare riferimento alle colonne di un frame di dati a meno che tu non sappia davvero cosa stai facendo ...
fonte
2015-10-31 18:50:35
Bella risposta. Forse dovrebbe essere sottolineato che 'apply' è per gli oggetti' matrix' e 'array'; qui la funzione corretta da usare è 'lapply', poiché' airquality' è un 'data.frame' (e quindi un' elenco'). Oppure si potrebbe costringere a 'matrix' l'oggetto con cui iniziare (qui ha senso, dato che l'obiettivo è chiamare' matplot'). – nicola