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:

alt text

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)

Error: Results must have the same dimensions.

domande:

  1. quello che sto facendo di sbagliato?
  2. dove posso trovare plyr.r? (Non è qui )
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top