开始使用plyr`m*ply`但无法重现示例

Dav*_*uer 1 r plyr

试图学习plyr,我一直试图从介绍性指南中重现代码.

该指南说代码在一个文件中plyr.r,但不是我能找到这个文件的地方.

但是复制第一个例子中的一个似乎很容易,所以我决定尝试一下:

替代文字

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

我收到此错误:

Error in function (..., na.last = TRUE, decreasing = FALSE)  : 
unimplemented type 'list' in 'orderVector1'
Run Code Online (Sandbox Code Playgroud)

dat <- cbind(c(10,100,50), mean=c(5,5,10), sd=c(1,2,1))
maply(dat, rnorm)
Run Code Online (Sandbox Code Playgroud)

Error: Results must have the same dimensions.
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我究竟做错了什么?
  2. 我在哪里可以找到plyr.r?(它不在这里)

dar*_*zig 5

您创建的数据框有一个标题(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
Run Code Online (Sandbox Code Playgroud)

并且m*pply函数不知道如何处理'c.10..100..50 ...'列.

正如您在docs(?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
Run Code Online (Sandbox Code Playgroud)

如果您确实需要使用不同参数的不同观察次数,则不应使用mdply,因为matrix/data.frame必须具有相同的列数.Insted use 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
Run Code Online (Sandbox Code Playgroud)