要编写快速的 R 代码,您确实需要重新考虑如何编写函数。您想要对整个向量进行操作,而不仅仅是一次观察单个观察值。
如果您真的不喜欢编写 C 风格的循环,您也可以尝试 Rcpp。如果您非常习惯于 C++ 并且更喜欢以这种方式编写函数,那么可能会很方便。
library(Rcpp)
do_stuff <- cppFunction('NumericMatrix do_stuff(
int steps,
int samples,
double s_0,
double r,
double sigma,
double k ) {
// Ensure RNG scope set
RNGScope scope;
// allocate the output matrix
NumericMatrix at( steps+1, samples );
// fill the first row
for( int i=0; i < at.ncol(); i++ ) {
at(0, i) = s_0;
}
// loop over the matrix and do stuff
for( int j=0; j < samples; j++ ) {
for( int i=1; i < steps+1; i++ ) {
at(i, j) = at(i-1, j) + sigma * sqrt(0.0008) * R::rnorm(0, 1);
}
}
return at;
}')
system.time( out <- do_stuff(500, 100000, 2.1, 0.02, 0.2, 1.9) )
给我
user system elapsed
3.205 0.092 3.297
因此,如果您已经具备一些 C++ 背景,请考虑学习如何使用 Rcpp 将数据映射到 R 或从 R 映射数据。