R语言 检查取消嵌套时是否重命名列

6jjcrrmo  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(87)

是否有方法可以知道在取消嵌套的过程中是否重命名了表?我想知道是否有什么方法可以拦截通过New names:传递的任何消息,并给予有关解决方案的更多上下文

# min reprex
library(tidyverse)

f <- function() { 
  tibble(
    x = 1:2, 
    y = 2:1, 
    z = tibble(x = 1)
  ) |> 
    unnest_wider(z, names_repair = "unique")
}

f()
New names:
• `x` -> `x...1`
• `x` -> `x...3`

 x...1     y x...3
 ----- ----- -----
     1     2     1
     2     1     1
更多上下文:
  • 这条信息源于
vctrs::vec_as_names(c("x", "x"), repair = "universal")
  • 我看到了关于withCallingHandlers()的信息,但不确定这是否是正确的路由。我以为有一种方法可以让错误/消息具有可以拦截的类,但我不记得我读到了什么。
  • testthat::expect_message()中的一些东西可能会有帮助。我以为会有一个has_message()函数在那里。
  • 有很多整洁的评估和比较前后的名称可能是棘手的。我可以用正则表达式"\\.+\\d+$"来查找名称,但不确定这是否足够强大,因为数据可能已经有了这种语法的字段。
t0ybt7op

t0ybt7op1#

hadley's answer中获得灵感,关于@ritchie-sacramento链接的问题,您应该查看evaluate包。

> eval_res <- evaluate::evaluate("f()")
> eval_res[[2]]$message
[1] "New names:\n* x -> x...1\n* x -> x...3\n"

这将需要更多的测试,看看当出现错误、警告甚至多条消息时,数据结构会发生什么变化。

相关问题