包含:=
的表达式不能很好地实现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/