我有一个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, ]
则返回矩阵。
答案 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, ])
}
手动版本具有所需的行为。