包含:=
的表达式不能很好地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))"
答案 0 :(得分:3)
您可以使用rlang::expr_deparse()
来获得所需的结果,这会改善打印质量。
rlang::expr_deparse(call2)
[1] "f(a := b(c := d))"