r语言 - formatR width.cutoff issue


tidy.source(source = "ugly.R", 
            file = "pretty.R", 
            reindent.spaces = 2, 
            width.cutoff = 72)

上面没有将代码包装在第 72 列,我的输出如下:

pwr.norm.test(d = (19.4 - 18.4)/2.8, n = 100, sig.level = 0.05, alternative = "two.sided")
pwr.norm.test(d = (18.9 - 18.4)/2.8, n = 200, sig.level = 0.05, alternative = "two.sided")
pwr.norm.test(d = (18.4 - 18.4)/2.8, n = 10000, sig.level = 0.05, alternative = "two.sided")

我做错了吗?此外,格式化后"/"符号前后没有空格。这应该是正确的吗?谢谢。

width.cutoff指定尝试换行的最小长度,而不是最大行长度。因此,在这种情况下,它不会开始尝试换行,直到它已经在单词的中间 alternative . tidy.source也不会拆分作业,因此直到行尾才找到任何可以中断的地方。

此外,tidy.source似乎确实没有在斜杠前后插入空格 - 这种行为似乎是从它使用的deparse继承而来的。

问题出在基本 R 函数上:deparse

我分叉了formatR,并破解了如何使用此功能。您可以通过以下方式安装:

library(devtools)
install_github("pablo14/formatR")

它适用于我测试的大多数情况(一整本书)。但是请自己检查,并考虑在获得拟合的行后返回原始存储库。

我做了什么:

内部函数tidy_block(调用deparse)N 次,直到满足宽度条件。否则,它将返回原始值。不可能解决所有情况,但比原始版本效果更好。

相关 git 拉取请求:https://github.com/yihui/formatR/pull/71

当它不起作用时该怎么办?

如果行继续保持在边距之外,则需要设置tidy=FALSE,然后手动添加输入(新行)(计算每行的字符数)。

希望这有帮助!

最新更新