R:ddply只返回矩阵列

时间:2015-08-13 07:42:17

标签: r matrix plyr

我有一个data.frame D,其中一些列是矩阵,例如

> head(round(D$equationRTs, 1))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]  2.9  2.1  3.2  3.5   NA   NA   NA
[2,]  2.8   NA   NA   NA   NA   NA   NA
[3,]  3.4  2.4   NA   NA   NA   NA   NA
[4,]  2.7  2.9  1.9   NA   NA   NA   NA
[5,]  3.6  2.6  2.4  2.4  3.4  2.8   NA
[6,]  2.4  2.0  3.3  2.8  2.8  2.6  3.6
...

> dim(D$equationRTs)
[1] 11277     7

> typeof(D$equationRTs)
[1] "double"

但是,当我执行ddply到子集D时:

my_function = function(df) {
    # Let's see what ddply passes to this function:
    print(head(round(df$equationRTs, 1)))
    print(dim(df$equationRTs))
    print(typeof(df$equationRTs))
}

D = ddply(D, .(id), my_function)

似乎只有第一列作为vector传递给my_function

[1] 2.9 2.8 3.4 2.7 3.6 2.4
NULL
[1] "double"

第2-6列刚刚消失。这里发生了什么?当子集传递给my_function时,如何使矩阵列保持不变?

额外奖励:似乎ddply正在执行类似D$equationRTs[id==x]的操作,它确实返回矩阵的第一列,而D$equationRTs[id==x, ]则返回矩阵。

1 个答案:

答案 0 :(得分:0)

您只需手动编码ddply执行(或应该执行...)的操作。

所以替换旧的

D = ddply(D, .(id), my_function)

for(id in levels(D$id)) {
    D[D$id == id, ] = check_quality(D[D$id == id, ])
}

手动版本具有所需的行为。