很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
9年前关闭。
我正在尝试对相同的模拟数据集上的几个统计测试进行强力的头对头比较。我将生成数千个“控制”和数千个“实验”种群,并在每组上运行相同的测试。调用测试的包装器将被调用数千次。
我的问题是:
计划
我已经有了模拟种群,并将使用适当的应用函数将控制和相应的实验观察传递给包装器。
除了控制和实验观察之外,包装器将没有任何参数(我们称它们为
xx
和 yy
)。其他所有内容都将在包装器中进行硬编码,以尽可能避免流控制逻辑的开销和在环境之间复制数据。每个被调用的函数都将在一个单独的行上,以一致的格式,按照依赖的顺序排列(例如,
cox.zph
依赖于已经存在的 coxph
对象,所以 coxph()
将是在 cox.zph()
之前调用)。这些函数将被包裹在 try()
中。如果一个函数失败,输出和依赖它的函数首先测试它返回的对象是否有try-error
作为它的第一类,如果是的话,某种占位符值。被调用函数的 block 后面会跟一个很长的
c()
语句,每个项目从单独的行上的相应拟合对象中提取。这里也是,如果源对象是 try-error
或占位符,输入 NA
在那个输出槽中。这样,如果某些函数失败,整个运行不会中止,并且每个模拟的输出是相同长度的数字向量,适合捕获到矩阵。
根据给定模拟集的目标,我可以根据需要注释掉或插入额外的测试和结果。
一些更具体的后续问题
compilePKGS(T)
和 enableJIT(3)
(来自内置的compiler
库),手动运行compile()
有什么进一步的收获吗?或 cmpfun()
在我的包装函数和它调用的解释函数上? enableJIT()
值(value),或者如果我不关心启动时间,是“越多越好”? browser()
,保存内部对象等,而不必中止整个运行。但是,我想 ping 通常会开始累加的文件系统。对于将 bool 值(即是否提供调试脚本)传递给正在运行的 R 进程(在 Linux 下)的最有效方式是否存在共识? 谢谢。
最佳答案
这可能只会解决您的部分问题。我也很幸运通过避免应用函数来加快进程。 apply 不是矢量化的,实际上需要相当多的时间。我看到了使用嵌套 ifelse() 语句的好处。
你试过 Rprof() 吗?在我的案例中,它有助于识别我的代码中的慢速元素。本身不是解决方案,而是有用的诊断。
关于performance - 如何最大化原生 R 脚本的性能(将运行数千次)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550093/