我有一个包含数百列和行的列表。我正在做的是循环遍历几乎所有可能的迭代,以获取两列之间的差异。例如,取第 1 列和第 2 列、第 1 列和第 3 列之间的差异……第 1 列和第 500 列……第 499 列和第 500 列。一旦我有了这些差异,我就会计算一些描述性统计数据(即平均值、标准偏差、峰度、偏度等)以用于输出。我知道我可以使用 lapply 单独计算每一列的统计数据,但是 sd(x)-sd(y) <> sd(xy) 所以它并没有真正减少我的循环。我可以使用 avg(x)-avg(y)=avg(xy) 但这是我可以使用此属性的唯一统计数据。
这是我拥有的一些伪代码:
for (n1 in 1:(number of columns) {
for (n2 in n1:(number of columns) {
temp<-bigdata[n1]-bigdata[n2]
results[abc]<-(maxdrawdown,mean,skewness,kurtosis,count,st dev,
median, downsidedeviation)
}
}
这样做可能需要几天的时间,所以我正在寻找一些改进。我已经在使用Compiler了,enableJIT(3)
它实际上确实使它明显更快。我还有其他一些想法,任何煽动都会有所帮助。一个是尝试利用降雪包(仍然试图让我了解如何实现它),并认为一个核心可以计算偏斜和峰度,而另一个核心可以计算其他统计数据。另一个想法是创建大块 temp(即 1-2、1-3、1-4)作为另一个 data.frame(或列表),以便对它使用 lapply 来一次淘汰许多迭代。这会有很大的不同吗?还有什么我可以做的,我什至没有想到的吗?