如何在R表达式中索引希腊符号

时间:2016-08-25 19:36:01

标签: r

这是一个简单的例子:

ylab<-expression(paste(beta, "/ml"))
plot(1:10, ylab=ylab)

enter image description here

但如果我使用另一个变量对beta进行索引:

unit<-beta
ylab<-expression(paste(unit, "/ml"))
plot(1:10, ylab=ylab)

enter image description here

我的问题是如何在R表达式中索引这些希腊符号?

2 个答案:

答案 0 :(得分:3)

首先关闭beta应该是双引号所以它是一个字符串而不是基本函数,正如@ 42所指出的那样

否则你似乎可以将一个字符串粘贴在一起,然后像这样评估它

unit<-"beta" #note double quotes
txt <- paste0("expression(",unit,"~'/ml')") #built expression as string
ylab<-eval(parse(text=txt)) #evaluate the expression with parse
plot(1:10, ylab=ylab)

enter image description here

答案 1 :(得分:3)

更新:似乎希望将变量从表达式外部传递到在plot调用之外构造的表达式变量变量。这似乎比使用eval(parse(text=paste( ... ))构造复杂得多:

unit=quote(beta)
ylab<-bquote(.(unit)/ml)
plot(1:10, ylab=ylab)

此处说明的课程是使用quote来阻止评估符号,然后评估表达式中的名称。

也可以使用as.nameas.symbol

 unit=as.name('beta')

回答我最初怀疑被问到的问题,因为它是我在R早期奋斗的一个(实际上是两个)我猜想你要构建刻度标签而不是轴标签而你想要这些显示为希腊字母或其他plotmath - y结构,但用升序的“索引”值代替。第二个请求需要使用substitutebquote,而第一个请求需要记住使用par参数来抑制y轴刻度和标签,然后使用axis

plot(1:10, ylab=ylab,yaxt="n")
# Now create "horizontally aligned" (using las=2)  beta-value tick labels
axis(2, at=1:10, 
        labels=as.expression(lapply( 1:10, function(x) bquote( beta == .(x)))) ,
        las=2)

as.expression - ed-results列表周围的bquote包装器是我在之前的答案(由我发现)中找到的,我认为只是标记为重复,但它没有涉及任何密谋,所以我决定将其视为“部分重叠”。