R.Call挂起更大的数据集

时间:2013-12-07 00:01:17

标签: c r

我正在将R函数转换为C以加速其运行时间。 C中的函数使用.Call从R调用,效果很好。但是,当我提供大型数据集时,它会停止。我在C代码的最开头放置了一个简单的print语句,并且该语句永远不会被打印出来,这使我相信C代码不是通过大型数据集而只是花费时间来完成,但它是首先无法前进。 此函数的仅R版本可以成功处理大型数据集,但需要大约40分钟。

是否可以通过.Call传递给C的对象大小限制?为什么R可以处理这个数据量,但不能处理.Call?

我已经能够使用R的虚拟输入数据重新创建问题: 当datsize为1300时,该功能有效。当datsize是13000(大约是我的大数据集的大小)时,函数会停止。

datsize <- 1300
# datsize <- 13000
dyn.load('loopRateMatrixThroughTimev2.so')

es1 <- round(runif(datsize, 0, 14000), 0)
es2 <- runif(datsize, 0, 200)
es3 <- runif(datsize, 0, 200)
es4 <- round(runif(13000, 0, 30), 0)
time <- runif(70, 0, 120)
lam1 <- runif(70, 0.1, 3)
lam2 <- runif(70, 0.1, 3)
mu1 <- runif(70, 0.1, 3)
tvec <- runif(100, 1, 100)
node <- -1
nodeset <- round(runif(datsize, 1, 14000), 0)
tol <- 1e-10

res <- .Call('loopRateThroughTimeMatrix', as.integer(es1), es2, es3, as.integer(es4), time, lam1, lam2, mu1, tvec, as.integer(node), as.integer(nodeset), tol)

可以在此处下载c代码和已编译的.so文件: https://dl.dropboxusercontent.com/u/34644229/cCode.zip

任何建议都将不胜感激!谢谢。

很抱歉,应该提到我在Mac OS X 10.9上运行R 3.0.2。

0 个答案:

没有答案