2012-10-30 36 views
1

如何在剧情的标题中写入H2o?化学式+ Gnu R中的文字剧情标题

由于这个hint我可以在标题中加入与

plot(main=expression(H[2]*O),0) 

一个普通的化学式在这里真正的配方更有点复杂,我要缩写他们和这些添加到文本,在需要的地方。 但这种失败:

h2o <- expression(H[2]*O) 
plot(main=paste(h2o, "in the air"),0) # paste fails here :(

回答

2

这里有一种方法可以让你在变量中使用化学公式。

# note that .formula is either an expression or a character 
# string that would define a valid expression 
maketitle <- function(.formula, .other){ 
    .expression <- sprintf('%s ~ "%s"',as.character(.formula), .other) 
    evalq(parse(text = .expression)) 
} 


f <- expression(H[2]*O) 
o <- 'blah blah' 

plot(1:10, main = maketitle(f, o)) 

记住的eval(parse(text = ...))的危险,

个人而言,我从来没有后悔过尝试,不要低估自己 未来的愚蠢。 - 格雷格·斯诺(解释为何的eval(解析(...))是 往往不理想,回答由臭名昭著的 财富引发的问题(106)) R-帮助(2007年1月

1

你想

plot(1:10, main = expression(H[2] * O ~ "in the air")) 

或者

plot(1:10, main = expression(H[2] * O ~ "in" ~ the ~ air)) 

(该in需求解析器捕捉第一个被引用,因为它是R的语法的一部分,如for(i in 1:10)。)

重要的一点是x ~ y表示法将xy彼此相邻地分开。 阅读?plotmath

但主要的是,无论你在这里提供的需要是由expression()返回的表达式。通常你不需要paste()里面的表达式,因为你可以在plotmath的表达式中包含字符串。

+0

,到目前为止工程,但是我怎样才能从一个变量中读出化学式? –

+1

我不认为你可以,我尝试了一些东西,包括'bquote()','substitute()'等等 –