【问题标题】:Old code for ddply does not workddply 的旧代码不起作用
【发布时间】:2015-10-28 17:08:43
【问题描述】:

我有一些代码来自 Longitudinal Data Analysis for the Behavioral Sciences using R (2012) 一书,这些代码不起作用。

这是数据的样子:

    subid risk gen eth ell sped  att ell2 risk2 grade read
      1  HHM   F Afr   0    N 0.94   No  DADV     5  172
      1  HHM   F Afr   0    N 0.94   No  DADV     6  185
      1  HHM   F Afr   0    N 0.94   No  DADV     7  179
      1  HHM   F Afr   0    N 0.94   No  DADV     8  194
      2  HHM   F Afr   0    N 0.91   No  DADV     5  200
      2  HHM   F Afr   0    N 0.91   No  DADV     6  210

代码如下所示:

ddply(.data = data.frame(MPLS.LS$read), .variables = .(grade = MPLS.LS$grade),
      each(read.mean = mean), na.rm = FALSE)

假设给我 5、6、7 和 8 年级的read 的平均值。但我收到了以下错误消息:

Warning messages:
1: In mean.default(x, ...) :
  argument is not numeric or logical: returning NA
2: In mean.default(x, ...) :
  argument is not numeric or logical: returning NA
3: In mean.default(x, ...) :
  argument is not numeric or logical: returning NA
4: In mean.default(x, ...) :
  argument is not numeric or logical: returning NA 

我的问题是为什么我会收到此消息?我可以更改代码中的某些内容以获得我想要的结果吗?

任何帮助将不胜感激,因为书中有很多代码对我不起作用。

【问题讨论】:

  • 我猜代码是ddply(data= MPLS.LS, .variables= .(grade), ,抱歉不能跟each部分。
  • 为什么在ddply 中调用data.frame()?并且以后不要重新指定数据。试试ddply(.data = MPLS.LS, .variables = .(grade), summarize, read.mean = mean(read, na.rm = FALSE))each() 通常用于当您想要调用一列上的多个函数中的每一个时。既然你有一个功能,你最好用summarize
  • 感谢 akrun 和 Gregor。您提供的代码工作正常。我无法回答您的问题,因为我不知道为什么书中提供了此代码...自 2012 年以来 plyr 软件包是否以某种方式进行了更新?
  • 是的,从那时起 plyr 已经更新,尤其是 ddply 已被dplyr 包取代并被dplyr 包所取代。
  • 希望你现在使用 base r 呵呵

标签: r plyr


【解决方案1】:

将我的评论更改为答案:

ddply 可以将你的完整数据框作为数据参数,那么你不需要重新指定数据:

ddply(.data = MPLS.LS, .variables = .(grade), 总结, read.mean = mean(read, na.rm = FALSE))

each() 通常用于(曾经)您想要在一列上调用 每个 的多个函数。既然你有一个功能,你最好用summarize

ddply 或多或少被dplyr 包所取代。我建议从他们当前的文档中学习这些软件包,而不是从可能过时的教科书中学习。 dplyrquite a few vignettes 在介绍功能方面做得很好。此操作的 dplyr 等效项是

library(dplyr)
group_by(MPLS.LS, grade) %>%
  summarize(read.mean = mean(read, na.rm = FALSE))

dplyr 非常流行 - 我非常喜欢它 - 但没有什么是永恒的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多