我正在尝试对同一模拟数据集上的几个统计测试进行蛮力的头对头比较。我将产生数千个“控制”和数千个“实验”群体,并在每组上运行相同的测试。调用测试的包装器将被调用数千次。
我的问题是:
我已经有模拟人口,并将使用适当的应用函数将控件和相应的实验观察结果传递给包装器。
除了控件和实验观察之外,包装器没有任何参数(我们称之为xx
和yy
)。其他所有内容都将在包装器中进行硬编码,以尽可能避免流控制逻辑的开销和在环境之间复制数据。
要调用的每个函数将按照一致的格式按照依赖顺序排列在单独的行上(例如,cox.zph
取决于已存在coxph
个对象的意义,因此coxph()
将早于cox.zph()
调用。这些函数将被包装在try()
中,如果函数失败,输出和依赖它的函数首先测试它返回的对象是否为try-error
作为其第一个类,如果是,则为某种类占位符值。
被调用函数块后面将跟一个长c()
语句,每个项目从一个单独的行中的相应拟合对象中提取。在这里,如果源对象变为try-error
或占位符,则在该输出槽中放置NA
。
这样,如果某些函数失败,整个运行不会中止,并且每个模拟的输出都是相同长度的数字向量,适合捕获到矩阵。
根据一组给定模拟的目标,我可以根据需要注释掉或插入其他测试和结果。
compilePKGS(T)
和enableJIT(3)
(来自内置的compiler
库),那么通过手动运行compile()
还是可以获得更多信息我的包装函数上的cmpfun()
和它调用的解释函数? enableJIT()
价值有任何指导,或者如果我不关心启动时间,是“越多越好”?browser()
,保存内部对象等,而不必中止整个运行。但是,我想,ping通常会开始加起来的文件系统。有没有就最有效的方式将一个布尔值(即调试脚本的来源,或者不是)传递给正在运行的R进程(在Linux下)?感谢。
答案 0 :(得分:3)
这可能只会解决部分问题。我也很幸运,通过避免应用功能来加速进程。 apply不是矢量化的,实际上需要花费很多时间。我使用嵌套的ifelse()语句看到了收益。
你试过Rprof()吗?在我的情况下,识别代码的慢速元素非常有用。不是解决方案本身,而是一种有用的诊断。