包含:=的表达式不能很好地实现deparse:

call1 <- quote(f(a = b(c = d)))
call2 <- quote(f(a := b(c := d)))

# nice
deparse(call1)
#> [1] "f(a = b(c = d))"

# not nice
deparse(call2)
# [1] "f(`:=`(a, b(`:=`(c, d))))"

我想从call2获得以下输出:"f(a := b(c := d))"

我正在寻找一种在所有情况下都像:==一样贬低<-的通用解决方案。

解决方法

此解决方法使用了<<-具有相似或相同优先级并且不经常使用的事实。我在原始调用中用:=替换了<<-,然后对其进行了很好的处理,然后将其gsub还原回了:=。我想要一个干净而通用的解决方案。
gsub("<<-",":=", deparse(do.call(
  substitute, list(call2, list(`:=` = quote(`<<-`))))))
#> [1] "f(a := b(c := d))"

最佳答案

您可以使用rlang::expr_deparse()获得所需的结果,该格式可以改善一些打印效果。

rlang::expr_deparse(call2)

[1] "f(a := b(c := d))"

关于r - 包含 `:=`的稀疏表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56186483/

10-12 17:17