【发布时间】:2011-07-28 14:33:00
【问题描述】:
我有一个 foreach,使用 .combine = rbind 和 112 个任务,一次 6 个并行操作。启用详细信息后,我可以看到所有任务都完成并合并,但随后我收到消息“任务 6 失败 - “缺少 TRUE/FALSE 需要的值”
所以我尝试只运行最后 12 个任务,一切正常!所以最后 12 个似乎没有任何问题,根据详细输出,前 100 个组合成功。
帮助! =)
numValues: 112, numResults: 0, stopped: TRUE
automatically exporting the following variables from the local environment:
data, dependentVariables, groupByVariable, numberOfBinsForMissingValueHistogram, outputDirectory
got results for task 1
numValues: 112, numResults: 1, stopped: TRUE
returning status FALSE
...
got results for task 100
numValues: 112, numResults: 100, stopped: TRUE
first call to combine function
evaluating call object to combine results:
fun(result.1, result.2, result.3, result.4, result.5, result.7,
result.8, result.9, result.10, result.11, result.12, result.13,
result.14, result.15, result.16, result.17, result.18, result.19,
result.20, result.21, result.22, result.23, result.24, result.25,
result.26, result.27, result.28, result.29, result.30, result.31,
result.32, result.33, result.34, result.35, result.36, result.37,
result.38, result.39, result.40, result.41, result.42, result.43,
result.44, result.45, result.46, result.47, result.48, result.49,
result.50, result.51, result.52, result.53, result.54, result.55,
result.56, result.57, result.59, result.60, result.61, result.62,
result.63, result.64, result.65, result.66, result.67, result.68,
result.69, result.70, result.71, result.72, result.73, result.74,
result.75, result.76, result.77, result.78, result.79, result.80,
result.81, result.82, result.83, result.84, result.85, result.86,
result.87, result.88, result.89, result.90, result.91, result.92,
result.93, result.94, result.95, result.96, result.97, result.98,
result.99, result.100)
returning status FALSE
got results for task 101
numValues: 112, numResults: 101, stopped: TRUE
...
got results for task 112
numValues: 112, numResults: 112, stopped: TRUE
calling combine function
evaluating call object to combine results:
fun(accum, result.101, result.102, result.103, result.104, result.105,
result.106, result.107, result.108, result.109, result.110,
result.111, result.112)
returning status TRUE
Error in { : task 6 failed - "missing value where TRUE/FALSE needed"
【问题讨论】:
-
了解您到底在做什么会有所帮助...这样的事情可能发生在随机过程、可能依赖于启动参数的高级拟合方法、中断的输入对象等等。 traceback() 也可以提供帮助。至于错误方法,我希望你注意到 result.6 从未被包含在 combine...
-
@Joris - 我正在遍历数据框中的列并计算一堆统计数据(如 %missing、标准差等)。这是我第一次听到有关 traceback() 的信息,所以我将深入挖掘。我没有注意到结果。6!接得好!我将不得不对此进行隔离(我错误地认为 foreach 会在遇到错误时停止)
-
@Joris - 我的函数出现问题,导致任务 6 失败...您能否发表您的评论作为答案,以便我接受并给予您信任?再次感谢您发现这一点,我真的需要第二双眼睛。
-
虽然它本身并不能解决这个问题,但我发现如果在错误发生时不让循环中止,它可以减少调试的痛苦,尤其是在需要很长时间才能完成的情况下。对我来说,包含
.errorhandling标志很有用,例如foreach(.errorhandling = "pass")。如果需要很长时间才能完成操作,我会这样做 - 我想单独修复异常,这可能更容易和更快地修复,只要在后处理中内置检查错误结果。此外,正如 Joris 所建议的,示例代码将非常有用。 -
@Iterator - 很高兴了解.errorhandling! “停止”的文档应该提到该选项不会在出错时立即终止。有一个立即停止的选项会很好。我喜欢在错误发生时修复它们,而不必担心后处理结果。更大的问题(恕我直言)不是当 foreach 停止时。除非我错过了一个选项?似乎 foreach 没有捕获堆栈跟踪或任何可用于隔离错误的上下文。我必须连续运行我的函数来查明引发错误的代码行。