【问题标题】:getting started with plyr `m*ply` but unable to reproduce examples开始使用 plyr `m*ply` 但无法重现示例
【发布时间】:2011-01-06 16:53:28
【问题描述】:

在尝试学习 plyr 时,我在尝试从 introductory guide 复制代码时遇到了困难。

指南说代码在文件plyr.r 中,但我找不到该文件的位置。

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

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? (不是here)

【问题讨论】:

  • 我会确保在下一个版本中改进该示例。谢谢!
  • @hadley 谢谢...你能给我指点plyr.r吗?
  • 我正在努力 - 你能在一周左右给我发邮件提醒吗?
  • @hadley 当然,感谢您的帮助。

标签: r plyr


【解决方案1】:

您制作的数据框有一个与 rnorm 函数不兼容的标头 (col.names)。见:

> 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,因为 matrix/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

【讨论】:

  • 感谢您的解释,只有一个列表才能工作是有道理的,与其说我想要不同的数字 per se 不如我想重现这个例子。
猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多