我想将格式化文本添加到图表(标题,轴标签,图例等)。标准的解决方案就是例如。
plot(1, 1, ylab=substitute(lambda[1]))
其中y轴标签将是带有下标1的希腊字母λ。这就是我想要的但不幸的是它是硬接线的。我希望它是灵活的,即可以选择将文本作为函数的参数传递。所以,看看r帮助,我发现substitute
的论证是一个表达式。所以我试过了
sometext <- "lambda[1]"
e <- parse(text="sometext")
plot(1, 1, ylab=substitute(e))
但是substitute
忽略了e是一个对象,只是打印文本'e'作为标签。所以我尝试了
plot(1, 1, ylab=eval(e))
这是更好的,因为eval
至少评估表达式,但标签现在实际上是'lambda [1]',即它不被评估为具有下标的希腊字母λ。
然后我明确表示'e'是一个表达式
e <- expression(sometext)
并运行前两个绘图命令,但结果与之前相同。 我最接近我想要达到的目的是做
plot(1, 1, ylab=substitute(var[i], list(var="lambda", i=1)))
其中至少1作为下标打印,但打印文本'lambda'而不是希腊字母λ。
有关如何实现第一个命令但没有硬连接的任何建议?例如。使用字符串并以某种方式将其转换为正确的对象,以便它正确显示?感谢。
丹尼尔
答案 0 :(得分:0)
您可以将标签作为表达式传递,然后在函数中使用substitute
:
dwat <- function(expr){
plot(1, 1, ylab = substitute(expr))
}
dwat(lambda[1])
dwat(mu[2])
如果要传递字符串而不是表达式,请使用parse
:
dwat_string <- function(string){
plot(1, 1, ylab = parse(text = string))
}
dwat_string("mu[1]")
另一种选择是使用省略号方法。这样你就可以将xlab或任何其他参数传递给plot
:
dwat2 <- function(...){
plot(1, 1, ...)
}
dwat2(ylab = expression(lambda[1]))
答案 1 :(得分:0)
你很亲密,检查一下是否有效
substitute(lambda[i],list(i=i))