包含 :=
的表达式无法很好地进行 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))"
':=' <- `<-`; showcase <- function(x, msg = NULL){if (!is.null(msg)) message(msg); call_chr <- rlang::expr_deparse(substitute(x)); cat("> ", call_chr,"\n"); print(x)}; showcase(cars_head := head(cars,2), "显示 cars 的头部")
- moodymudskipper