начало работы с plyr `m * ply`, но не может воспроизвести примеры - PullRequest
1 голос
/ 06 января 2011

Пытаясь выучить plyr, я застрял, пытаясь воспроизвести код из вводного руководства .

Руководство говорит, что код находится в файле plyr.r, но не там, где я могу найти этот файл.

Но воспроизведение одного из первых примеров показалось мне достаточно простым, поэтому я решил попробовать:

alt text

dat <- data.frame(c(10,100,50), mean=c(5,5,10), sd=c(1,2,1))
maply(dat, rnorm)

и я получаю эту ошибку:

Error in function (..., na.last = TRUE, decreasing = FALSE)  : 
unimplemented type 'list' in 'orderVector1'

пытается

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.

вопросы:

  1. что я делаю не так?
  2. где я могу найти plyr.r? (это не здесь )

1 Ответ

5 голосов
/ 06 января 2011

Созданный вами фрейм данных имеет заголовок (col.names), который не совместим с функцией rnorm.См .:

> 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

И функция m * pply не знает, что делать со столбцом 'c.10..100..50 ...'.

Как вы можетесм. в документации (?mdply), следующий пример работает как шарм:

> 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

Если вы действительно хотите различное количество наблюдений с разными параметрами, вы не должны использовать mdply, потому что матрица /data.frame должен иметь одинаковое количество столбцов.Использование Insted mlply, например:

> 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
...