应该有多种方式,我用比较简单的一种方式(snow包)来实现:
- # 先建立一个测试用的函数,为更易观察耗时,循环1千万次。
- test <- function() {
- x <- 0
- for (i in 1:10000000) {
- x <- x + i
- }
- return(x)
- }
- library(snow)
- cl <- makeCluster(type = "SOCK", c("localhost", "localhost")) # 建立两个本地CPU内核的并行
- clusterCall(cl, test) # 执行并行计算
- # 以下是计算结果,自动封装在一个list中
- [[1]]
- [1] 5e+13
- [[2]]
- [1] 5e+13
- system.time({test();test()}) # 测试简单循环两个1千万次的耗时
- user system elapsed
- 6.19 0.03 6.32
- system.time(clusterCall(cl, test)) # 测试并行循环的耗时
- user system elapsed
- 0.00 0.00 3.99
- stopCluster(cl) # 关闭并行
复制代码