Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在循环中删除带有警告的迭代_R_Loops_Warnings - Fatal编程技术网

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) #

在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) # 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
let
tryCatch()
函数可以移动到下一个迭代。但是,似乎我们不必使用
i=i+1
。如果我使用
j=1
而不是
i=i+1
,代码将以相同的方式工作,即使
j
在任何地方都没有定义。因此我假设
函数(w)
只是一个警告处理程序,它实际上不会更改循环中
i
的值,对吗?谢谢。