考虑这个简单的例子:
labNames <- c('xLab','yLabl')
plot(c(1:10),xlab=expression(paste(labName[1], x^2)),ylab=expression(paste(labName[2], y^2)))
我想要的是变量'labName定义的字符条目, 'xLab'或'yLab'出现在由表达式()定义的X ^ 2或y ^ 2旁边。实际上,带有下标的实际文本“labName”将连接到上标表达式。
有什么想法吗?
答案 0 :(得分:62)
@Aaron的另一种解决方案是bquote()
函数。我们需要提供一个有效的R表达式,例如LABEL ~ x^2
,其中LABEL
是您要从向量labNames
分配的字符串。 bquote
评估.( )
中包含的表达式中的R代码,并将结果替换为表达式。
以下是一个例子:
labNames <- c('xLab','yLab')
xlab <- bquote(.(labNames[1]) ~ x^2)
ylab <- bquote(.(labNames[2]) ~ y^2)
plot(c(1:10), xlab = xlab, ylab = ylab)
(注意~
只是添加一些间距,如果你不想要空格,用*
替换它,表达式的两个部分将并列。)
答案 1 :(得分:26)
改为使用substitute
。
labNames <- c('xLab','yLab')
plot(c(1:10),
xlab=substitute(paste(nn, x^2), list(nn=labNames[1])),
ylab=substitute(paste(nn, y^2), list(nn=labNames[2])))
答案 2 :(得分:7)
非常好的示例使用paste和替换来排版http://vis.supstat.com/2013/04/mathematical-annotation-in-r/处的符号(mathplot)和变量
这是一个ggplot改编
library(ggplot2)
x_mean <- 1.5
x_sd <- 1.2
N <- 500
n <- ggplot(data.frame(x <- rnorm(N, x_mean, x_sd)),aes(x=x)) +
geom_bar() + stat_bin() +
labs(title=substitute(paste(
"Histogram of random data with ",
mu,"=",m,", ",
sigma^2,"=",s2,", ",
"draws = ", numdraws,", ",
bar(x),"=",xbar,", ",
s^2,"=",sde),
list(m=x_mean,xbar=mean(x),s2=x_sd^2,sde=var(x),numdraws=N)))
print(n)
答案 3 :(得分:3)
如果x ^ 2和y ^ 2是已经在变量平方中给出的表达式,则解决了这个问题:
labNames <- c('xLab','yLab')
squared <- c(expression('x'^2), expression('y'^2))
xlab <- eval(bquote(expression(.(labNames[1]) ~ .(squared[1][[1]]))))
ylab <- eval(bquote(expression(.(labNames[2]) ~ .(squared[2][[1]]))))
plot(c(1:10), xlab = xlab, ylab = ylab)
请注意[[1]]后面的平方[1]。它为您提供&#34;表达式(...)&#34;括号之间没有任何转义字符。