我正在使用 sfsmisc
包中的 pretty10exp()
来使科学记数法看起来更好。例如:
library(sfsmisc)
a <- 0.000392884
pretty10exp()
的输出如下所示:
> pretty10exp(a, digits.fuzz=3) #round to display a certain number of digits
expression(3.93 %*% 10^-4)
我可以使用它在图表的标题或轴上显示 a
的漂亮版本,如本文所述: Force R to write scientific notations as n.nn x 10^-n with superscript
但是,当我尝试将它与 paste()
结合起来编写如下字符串序列时,事情又变得丑陋了:
# some data
x <- seq(1, 100000, len = 10)
y <- seq(1e-5, 1e-4, len = 10)
# default plot
plot(x, y)
legend("topleft", bty="n",legend=paste("p =", pretty10exp(a, digits.fuzz=3)))
这给了我下图,所以我想 paste()
无法处理可以在 pretty10exp()
的输出中找到的那种格式化表达式>:
是否有 paste()
的替代方法,我可以使用它来组合表达式“p =”和 pretty10exp()
的科学记数法?
请您参考如下方法:
一个解决方案就是复制 pretty10exp()
所做的事情,对于单个数字 a
以及您设置/默认的选项,本质上是:
a <- 0.00039288
digits.fuzz <- 3
eT <- floor(log10(abs(a)) + 10^-digits.fuzz)
mT <- signif(a/10^eT, digits.fuzz)
SS <- substitute(p == A %*% 10^E, list(A = mT, E = eT))
plot(1:10)
legend("topleft", bty = "n", legend = SS)
使用 bquote()
的等价物是
SS <- bquote(p == .(mT) %*% 10^.(eT))