R: ddply only returns 矩阵列的第一列

R: ddply only returns first column of matrix column

我有一个 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"

但是,当我对 D:

进行 ddply 子集时
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)

似乎只有第一列作为向量传递给 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] 的事情,它确实 returns 矩阵的第一列,而 D$equationRTs[id==x, ] returns 矩阵。

您可以简单地手动编码 ddply 做什么(或应该做什么...)。

所以替换旧的

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

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

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