这是一个简单的例子:
ylab<-expression(paste(beta, "/ml"))
plot(1:10, ylab=ylab)
但如果我使用另一个变量对beta进行索引:
unit<-beta
ylab<-expression(paste(unit, "/ml"))
plot(1:10, ylab=ylab)
我的问题是如何在R表达式中索引这些希腊符号?
答案 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)
答案 1 :(得分:3)
更新:似乎希望将变量从表达式外部传递到在plot
调用之外构造的表达式变量变量。这似乎比使用eval(parse(text=paste( ... ))
构造复杂得多:
unit=quote(beta)
ylab<-bquote(.(unit)/ml)
plot(1:10, ylab=ylab)
此处说明的课程是使用quote
来阻止评估符号,然后评估表达式中的名称。
也可以使用as.name
或as.symbol
:
unit=as.name('beta')
回答我最初怀疑被问到的问题,因为它是我在R早期奋斗的一个(实际上是两个)我猜想你要构建刻度标签而不是轴标签而你想要这些显示为希腊字母或其他plotmath
- y结构,但用升序的“索引”值代替。第二个请求需要使用substitute
或bquote
,而第一个请求需要记住使用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
包装器是我在之前的答案(由我发现)中找到的,我认为只是标记为重复,但它没有涉及任何密谋,所以我决定将其视为“部分重叠”。