gpt4 book ai didi

r - 使用 R 中的条件对象将 `immediate.` 设置为 `TRUE`?

转载 作者:行者123 更新时间:2023-12-03 17:10:44 24 4
gpt4 key购买 nike

我正在尝试使用条件对象在 R 中发出自定义条件信号。但是,我似乎无法设置 immediate.论据 TRUE ,我也不能更改 stop 的任何其他参数, warning等功能。有没有办法使用条件对象但仍然保留 stop 的其他参数, warning , 和 message ?
MWE:
警告可能以“通常”的方式按预期工作,这意味着在每次迭代时都会出现警告。 这就是我的愿望。

# Works as expected
for(i in 1:20){warning("A warning", immediate.=T) ; Sys.sleep(.1)}
>Warning: A warning
>Warning: A warning
>Warning: A warning
>Warning: A warning
>Warning: A warning
... [truncated]

相比之下,当使用下面的条件对象时,会收集警告,然后我们被告知最后有 20 个警告:
尝试 1
# Does not signal warning immediately 
cond = structure(list(message="A warning", call=NULL, immediate.=T), class=c("warning", "condition"))

for(i in 1:20){ warning(cond); Sys.sleep(.1) }
>There were 20 warnings (use warnings() to see them)

尝试 2 -- 手动设置参数
 for(i in 1:20) {warning(cond, immediate.=T); Sys.sleep(.1)}
>additional arguments ignored in warning()
>additional arguments ignored in warning()
>...[truncated]
>There were 20 warnings (use warnings() to see them)

尝试 3 -- 删除 immediate.=T来自 cond 的争论对象,并重试 (2)
cond = structure(list(message="A warning", call=NULL), class=c("warning", "condition"))

for(i in 1:20) {warning(cond, immediate.=T); Sys.sleep(.1)}
>additional arguments ignored in warning()
>additional arguments ignored in warning()
>...[truncated]
>There were 20 warnings (use warnings() to see them)
有没有办法使用条件对象但仍然保留 stop 的其他参数, warning , 和 message ?

最佳答案

好的,所以我找到了一种解决方法/解决方案,可以完成工作,尽管它有点不雅。无论如何,有效的解决方案包括:

  • 将警告包装在 tryCatch 中区块
  • 捕获警告条件对象
  • 根据需要修改(2)中捕获的对象
  • 使用 (3)
  • 中修改后的对象重新警告
    # Set immediate. to false, collects warnings as expected
    my.call = "A call"

    for(i in 1:20){

    tryCatch(warning("A warning", immediate.=F),
    warning = function(w){w$call <- my.call; warning(w)}
    )

    Sys.sleep(.1)

    }

    >There were 20 warnings (use warnings() to see them)


    # changing immediate. to true, warns at each iteration as desired
    for(i in 1:20){

    tryCatch(warning("A warning", immediate.=T),
    warning = function(w){w$call <- my.call; warning(w)}
    )

    Sys.sleep(.1)

    }

    >Warning in "A call" : A warning
    >Warning in "A call" : A warning
    >Warning in "A call" : A warning
    >...[truncated]

    关于r - 使用 R 中的条件对象将 `immediate.` 设置为 `TRUE`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63856125/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com