【发布时间】:2013-06-16 04:45:20
【问题描述】:
我有一个大型数据框(800 个变量的 40000 个观察值),并希望使用类似于点积的东西对每个观察值的一系列列进行操作。这就是我实现它的方式:
matrixattempt <- as.matrix(dframe)
takerow <- function(k) {as.vector(matrixattempt[k,])}
takedot0 <- function(k) {sqrt(sum(data0averrow * takerow(k)[2:785]))}
for (k in 1:40000){
print(k)
dframe$dot0aver[k]<-takedot0(k)
}
打印只是为了跟踪正在发生的事情。 data0averrow 是一个预先定义好的数值向量,与 takerow(k)[2:785] 大小相同。
这是在运行,并且从一些测试中可以正常运行,但速度很慢。
我搜索了列子集的点积,并找到了this question,但不知道如何将其应用于我的设置。 ddply 听起来它应该工作得更快(尽管我不想进行拆分,并且必须使用与引用的提问者相同的定义 ID 技巧)。有什么见解/提示吗?
【问题讨论】:
-
如果这些答案都不起作用,你真的需要用一个小测试用例来解决这个问题,比如一个 8 x 10 矩阵?
-
@Arun 的回复效果很好。谢谢。
标签: r dataframe plyr dot-product