R语言一直是数据分析师广泛使用的工具,因为它具有强大的统计计算能力和可视化。 但它的一大缺点是它在大规模计算中不够快,这也是每个人都受到批评的一点。 该问题的一个解决方案是将大量统计计算过程转移到底层语言,例如C语言,C等。 下面简要介绍如何结合R语言和C语言来提高统计计算的速度。
首先让我们看一下使用R语言完成循环的示例:a
n
for( i in c(1:n)){
print('helloword')
}
b
print(paste0('耗时R:',as.numeric(b-a)))
[1] "helloword"
[1] "helloword"
[1] "helloword"
[1] "helloword"
[1] "helloword"
[1] "helloword"
[1] "helloword"
[1] "helloword"
[1] "helloword"
[1] "helloword"
[1] "耗时R:0.00289702415466309"
如果您使用C来完成此过程:#include #include
void hello(int *n){
int i;
for (i=0; i
Rprintf("Hello, world!\n");
}
}
将脚本命名为helloword2.C并编译C脚本:
确保系统已加载gcc,然后在命令行或终端中执行。
R CMD SHLIB helloword2.c
然后,您可以在当前目录中看到helloword2.so或helloword2.dll文件。 如果是windows系统,则调用.dll文件,linux系统调用.so文件。 这是一个.so文件的示例。
首先在R中导入helloword2.so文件,首先使用setwd查找.so文件的目录,然后使用dyn.load函数导入文件。
Setwd( '/用户的/ usr /桌面/测试')
Dyn.load( “helloword2.so”)
导入成功后,将使用.C()函数调用它。a
n
.C('hello',as.integer(n))
b
print(paste0('耗时C:',as.numeric(b-a)))
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
Hello, world!
[[1]]
[1] 10
[1] "耗时C:0.00203609466552734"
这是对R环境中C语言程序的成功调用。 可以注意到,C语言执行10个周期,大约需要0.002036秒,并且R语言执行相同的过程并且需要0.002897。 C的性能优于R,尤其是在大规模数据计算中。