【发布时间】: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 呵呵