0

こんにちは、複数の関数を使用してより高速な R スクリプトを作成することについて簡単な質問がありました。関数内の関数、すなわち

function(args)
{
function_using_previous_function_output(args)
{ manipulation of arguments}

}

お互いの外部に物を渡す関数:

function(args)
{return(output}
}

function_using_previous_function_output(output)
{
manipulation of arguments
}

これらのうち、スタイルまたは最適化のベスト プラクティスはありますか??

どうもありがとう!

4

2 に答える 2

5

簡潔な答え; コードの最適化に関して間違った道を見下ろしています。

長い答え;

コンテンツは、ほとんどの場合、スクリプトのパフォーマンスの最も重要な側面です。コードがすでに並列化され、ベクトル化され、Rcpp 化され、バイト コンパイル (require(compiler);enableJIT(3)) されており、さらに速度が必要な場合にのみ、実際に構文をごまかす必要があります。

まれに、速度を上げるためにコード自体の形状を変更する必要がある場合は、これらの記事が役に立ちます。

http://www.r-bloggers.com/speeding-up-r-computations/ http://radfordneal.wordpress.com/2010/08/15/two-surpising-things-about-r/

元の質問に答えるには; system.time() 関数を使用して効率を判断する必要があります。どちらにしても統計的に有意な差があるとは思えません

于 2013-02-20T17:25:31.153 に答える
3

私は、生物学モデルのさまざまなプロセスに基づいてさまざまなステップを実行するために多くの関数を使用するシミュレーション用のパッケージを作成しています。次に、それらの関数自体がメイン関数によって呼び出され、メイン関数はそれらを呼び出してシミュレーションを実行し、時にはそれらのサブ関数の出力を使用していくつかの処理を実行します。ポイントは、関数内の関数に大きく依存しているということです。メインのシミュレーション関数に一連のステップがある場合、速度の違いはあまり見られません。それを整理するために、これらのステップをサブ関数に入れました。ただし、各サブ関数が終了すると、サブ関数中に使用された変数またはゴミは実際には結果または使用されないため、私はそれを好みます。return()サブ関数が終了すると 'd が削除されます。つまり、必要のないときに変数を誤って変更する可能性が低くなります。通常、私が見た R の主な速度の違いは、ループ操作があり、それをベクトル化するか、Rcpp を使用して C++ で実行する場合に発生します。とにかく、R のほとんどのコアは高速であり、既にバイト コンパイルされています。

于 2013-02-20T14:54:35.913 に答える