何百もの列と行を持つリストがあります。私がやっていることは、2 つの列の差を取るほぼすべての可能な繰り返しをループすることです。たとえば、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)
ています。これにより、実際には著しく高速になります。私には他にもいくつかのアイデアがあり、どんな扇動も役に立ちます。1 つは Snowfall パッケージを利用しようとしており (まだ実装方法を理解しようとしています)、1 つのコアがスキューと尖度を計算し、もう 1 つのコアが他の統計を計算できると考えています。もう 1 つのアイデアは、temp の大きなチャンク (つまり、1-2、1-3、1-4) を別の data.frame (またはリスト) として作成し、それに対して lapply を使用して一度に多くの反復をノックアウトすることです。これは大きな違いを生むでしょうか?私が考えていないことで、他にできることはありますか?