ループの効率は、データのベクトル全体をループするのではなく、基本的に一度に処理する適用関数を使用することで、Rで大幅に向上させることができます。上記のループの場合、各反復中に発生する2つの基本的な操作があります。
# A vector of two random numbers is generated
x <- rnorm( 2 )
# The difference between those numbers is calculated
x[2] - x[1]
この場合、適切な関数はですsapply()
。sapply()
loopステートメントによって生成されたベクトルなどのオブジェクトのリストを操作し、1:N
結果のベクトルを返します。
sapply( 1:N, function( i ){ x <- rnorm(2); return( x[2] - x[1] ) } )
インデックス値i
は関数呼び出し中に使用可能であり、との間の値を連続して1
取得することに注意してくださいN
。ただし、この場合は必要ありません。
apply
どこで使用できるかを認識する習慣を身につけることfor
は、非常に貴重なスキルです。並列計算用の多くのRライブラリは、apply
関数を介したプラグアンドプレイの並列化を提供します。多くの場合、を使用すると、コードのリファクタリングをapply
行わずに、マルチコアシステムでパフォーマンスを大幅に向上させることができます。