1
在R,我需要完成一个循环一组,但有时计算会产生警告,我想摆脱与警告的任何结果,所以最终的结果将没有任何有警告的元素。例如:有警告下降迭代在循环
result <- numeric(10)
for (i in 1:length(result)){
element <- sample(-1:1,1)
result[i] <- log(element)
}
你可以看到当element=-1
,log(element)=NaN
,NaN
仍将存储result
而R将给予警告。我只是想避免这样的NaN
根据警告存储到result
。这是一个容易的情况,我们可以有其他选择。但我不得不面对的情况要复杂得多。所以我希望能找到一种方法,如果发生了警告,那么我们将通过警告来计算结果。
RHertel,谢谢你的回复。 'tryCatch()'看起来像我应该使用的函数。唯一的问题是我不想跳过任何迭代,我只想确保结果向量中的所有元素都没有任何警告消息。在你的例子中,如果我的理解是正确的,有用的结果会少于10? – user17670
您需要决定在“NaN”情况下应该存储在向量中的内容。当您尝试取负数的对数时,这种情况会发生在您的示例中。在这种情况下,结果没有定义。什么应该存储在向量中?如果'NaN'可以作为向量中的条目,但是只是在脚本运行时打印的警告令您感到不安,则可以使用'try(result [i] < - log(element),silent = TRUE)'(在这种情况下,警告将在脚本运行之后被打印*)。 – RHertel
对此感到抱歉。当生成'NaN'时,我只想运行'element < - sample(-1:1,1);结果[i] < - log(element)',直到没有任何警告产生的结果。我正在尝试使用一些“while”循环来实现我的目标。 – user17670