带有R的表达式(...)中的变量部分

时间:2013-07-22 12:52:50

标签: r plot

我想在R图中显示物理单位。为了获得更好的排版,我以这种方式使用表达式函数:

plot(rnorm(10),rnorm(10),main=expression(µg.L^-1))

现在假设该单元不是静态已知的,并由变量[unit]给出:

unit = 'µg.L^-1'
plot(rnorm(10),rnorm(10),main=expression(unit))

这当然不起作用,因为[unit]不会被其值代替。有什么方法可以实现这个目标吗?

修改 我要强调的是,这里的主要困难是要显示的单位作为字符串发送到我的绘图功能。所以unit的内容应该被解释为某个点(从一个字符串转换为一个表达式对象)的表达式,这就是texb的答案派上用场的地方。所以请将此问题取消标记为重复,因为parse的使用在此非常重要,甚至在您建议的帖子中都没有提及。

3 个答案:

答案 0 :(得分:2)

怎么样:

unit = 'µg.L^-1'
plot(rnorm(10),rnorm(10),main=parse(text=unit))

答案 1 :(得分:2)

bquote函数使您可以在插入变量值时灵活地创建表达式。这是一个例子:

unit <- as.name('mu')
plot(rnorm(10), main=bquote( .(unit)*.L^-1 ) )

答案 2 :(得分:2)

我认为这两个答案都很有帮助,但我们建议更完整地使用plotmath语法。你目前接受的答案并没有真正解析希腊语mu和Greg Snow的答案没有说明表达式如何用作值(但它确实显示了如何在表达式中替换)。所以这是另一个替代方案,也显示使用plotmath cdot运算符作为分隔“点”,我认为更好地解决了您对排版的兴趣。

plot(1,1, main=expression(mu*g %.% L^-1) )

也可以创建完全形成的表达式并按名称保存:

micgmperL = expression(mu*g %.% L^-1) 
plot(1,1, main=micgmperL)