我正在使用 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)) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!