【问题标题】:Alternatives to paste( ) to concatenate formatted text expressions on a graph?paste() 的替代方法来连接图形上的格式化文本表达式?
【发布时间】:2014-05-16 04:42:30
【问题描述】:

我正在使用 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() 的科学记数法吗?

【问题讨论】:

  • 是的。我知道的一个是bquote。您也许可以使用call,但我不确定。
  • 我刚刚尝试了bquote,但我不确定我是否正确使用它,唯一显示的是“p =”,没有别的......
  • 或许可以看看sprintf
  • sprintf 相同,它只是完全忽略了“p =”之后的所有内容,这里有什么我遗漏的吗?
  • 啊,没关系,我以为bquote 会被使用而不是 paste,但你实际上把它放在paste 括号内,让我再试一次

标签: r graph output scientific-notation


【解决方案1】:

一种解决方案就是复制 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))

【讨论】:

    【解决方案2】:

    绝对不是一个准确的答案,但我只是玩了一会儿。 bquote 感觉很好。

    > call("rep", 10, 7)
    ## rep(10, 7)
    
    > bquote(.(call("rep", 10, 7)) * q^5)
    ## rep(10, 7) * q^5
    
    > sprintf("paste('%smm'^'%s')", 5, 5)
    ## [1] "paste('5mm'^'5')"
    

    还有我个人最喜欢的,当然会返回TRUE... 只要我有人写is.awesome

    > bquote( f <- function(x) { is.awesome(R) })
    ## f <- function(x) {
    ##     is.awesome(R)
    ## }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      相关资源
      最近更新 更多