R 在循环中删除带有警告的迭代
在R中,我需要在循环中完成一个集合,但有时计算会生成警告,我想去掉带有警告的任何结果,因此最终结果将不包含带有警告的任何元素。例如:R 在循环中删除带有警告的迭代,r,loops,warnings,R,Loops,Warnings,在R中,我需要在循环中完成一个集合,但有时计算会生成警告,我想去掉带有警告的任何结果,因此最终结果将不包含带有警告的任何元素。例如: result <- numeric(10) for (i in 1:length(result)){ element <- sample(-1:1,1) result[i] <- log(element) } result您可以尝试使用tryCatch()并将其与递归相结合,以避免出现警告消息和NaN条目: set.seed(222) #
result <- numeric(10)
for (i in 1:length(result)){
element <- sample(-1:1,1)
result[i] <- log(element)
}
result您可以尝试使用tryCatch()
并将其与递归相结合,以避免出现警告消息和NaN
条目:
set.seed(222) # for reproducibility of the pseudo-random results
set_to_log <- function() {
element <- sample(-1:2,1)
tryCatch(log(element), warning = function(w) set_to_log())
}
result <- numeric(10)
for (i in 1:length(result)){
result[i] <- set_to_log()
}
#> result
# [1] 0.6931472 -Inf 0.6931472 0.6931472 -Inf -Inf 0.0000000 -Inf 0.0000000 0.6931472
set.seed(222)#用于伪随机结果的再现性
设置为日志RHertel,谢谢您的回复tryCatch()
看起来是我应该使用的函数。唯一的问题是我不想跳过任何迭代,我只想确保结果向量中的所有元素都没有任何警告消息。在您的示例中,如果我的理解是正确的,那么有用的结果将小于10?您需要决定在NaN
的情况下向量中应该存储什么。在您的示例中,当您尝试取负数的对数时,会出现这种情况。在这种情况下,结果没有定义。向量中应该存储什么?如果NaN
作为向量中的一个条目是正确的,但您只是被脚本运行时打印的警告所干扰,您可以使用try(结果[i]很抱歉造成混淆。当生成NaN
时,我只想运行元素,感谢您的澄清。我认为在这种情况下递归可能会有所帮助。我相应地更新了帖子,并扩大了采样范围,以增加可接受结果的多样性。这与您所看到的一致吗ng for?谢谢,RHertel。递归是我要找的!我可以问一个关于您的第一个版本代码中的细节的问题吗。在该代码中,它看起来像I=I+1
lettryCatch()
函数可以移动到下一个迭代。但是,似乎我们不必使用i=i+1
。如果我使用j=1
而不是i=i+1
,代码将以相同的方式工作,即使j
在任何地方都没有定义。因此我假设函数(w)
只是一个警告处理程序,它实际上不会更改循环中i
的值,对吗?谢谢。