iniziare con plyr `m * ply` ma in grado di riprodurre esempi
Domanda
Cercando di imparare plyr, ho ottenuto bloccato cercando di riprodurre il codice dalla guida introduttiva .
La guida dice che il codice è in un file plyr.r
, ma non dove posso trovare questo file.
Ma che riproduce uno dei primi esempi sembrava abbastanza facile, così ho deciso di fare un tentativo:
dat <- data.frame(c(10,100,50), mean=c(5,5,10), sd=c(1,2,1))
maply(dat, rnorm)
e ottengo questo errore:
Error in function (..., na.last = TRUE, decreasing = FALSE) :
unimplemented type 'list' in 'orderVector1'
cercando
dat <- cbind(c(10,100,50), mean=c(5,5,10), sd=c(1,2,1))
maply(dat, rnorm)
dà
Error: Results must have the same dimensions.
domande:
- quello che sto facendo di sbagliato?
- dove posso trovare plyr.r? (Non è qui )
Soluzione
Il frame dati fatto ha un'intestazione (col.names) che non è compatibile con la funzione RNorm. Vedi:
> dat <- data.frame(c(10,100,50), mean=c(5,5,10), sd=c(1,2,1))
> dat
c.10..100..50. mean sd
1 10 5 1
2 100 5 2
3 50 10 1
E la m * funzione di PPLY non so cosa fare con la 'c.10..100..50 ...' colonna.
Come si può vedere nella documentazione (?mdply
), il seguente esempio funziona come un fascino:
> mdply(data.frame(mean = 1:5, sd = 1:5), rnorm, n = 2)
mean sd V1 V2
1 1 1 0.09919179 0.6083586
2 2 2 0.92787891 -0.1139743
3 3 3 2.21236781 0.8029677
4 4 4 4.16506428 9.2477373
5 5 5 1.26558507 12.0633377
Se si vuole veramente diverso numero di osservazioni con i diversi parametri, non si dovrebbe usare mdply, perché la matrice / data.frame deve avere lo stesso numero di colonne. uso invece mlply
, per esempio:.
> mlply(data.frame(n=1:5, mean = 1:5, sd = 1:5), rnorm)
$`1`
[1] 1.053083
$`2`
[1] -1.650090 2.239547
$`3`
[1] -0.94697908 -1.11479730 -0.03467497
$`4`
[1] 6.427796 1.482655 1.436822 -5.993420
$`5`
[1] 4.557689 6.217015 2.105255 -1.309664 -2.969184
attr(,"split_type")
[1] "array"
attr(,"split_labels")
n mean sd
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5