这很好用
data = c(1,3,2)
max_y <- max(data)
plot_colors <- c("blue")
plot(data, type="l", col=plot_colors[1], ylim=c(0,max_y), axes=FALSE, xlab=expression(e[3]))
axis(1, at=c(1,2,3), lab=expression(e[1],e[2],e[3]) )
但我想从文件中读取x轴上的标签。我尝试了以下方法:
data = c(1,3,2)
names = vector("expression",3)
names[1] = "e[1]"
names[2] = "e[2]"
names[3] = "e[3]"
max_y <- max(data)
plot_colors <- c("blue")
plot(data, type="l", col=plot_colors[1], ylim=c(0,max_y), axes=FALSE, xlab=expression(e[3]))
axis(1, at=c(1,2,3), lab=names )
我试过替换:
axis(1, at=c(1,2,3), lab=substitute(expression(a), list(a="e[1],e[2],e[3]")) )
但这也行不通。 有什么建议吗?
答案 0 :(得分:2)
你想要的是?parse
:
names = c('e[1]', 'e[2]', 'e[3]')
namesExp = do.call(c, lapply(names, function(x) parse(text = x)))
plot(c(1,3,2), type='l', col='blue', axes=FALSE, xlab = expression(e[3]))
axis(3, at=c(1,2,3), lab = names)
axis(1, at=c(1,2,3), lab = namesExp)
上面,lapply
返回表达式列表:
> print(lapply(names, function(x) parse(text = x)))
[[1]]
expression(e[1])
[[2]]
expression(e[2])
[[3]]
expression(e[3])
do.call
只是非重新列出它(也可以使用unlist(lapply(names, function(x) parse(text = x)), recursive = F)
):
> print(do.call(c, lapply(names, function(x) parse(text = x))))
expression(e[1], e[2], e[3])
答案 1 :(得分:0)
这是罪恶的丑陋,但它做你想要的。可能有更好的方法。
data = c(1,3,2)
max_y <- max(data)
plot_colors <- c("blue")
plot(data, type="l", col=plot_colors[1], ylim=c(0,max_y),
axes=FALSE, xlab=expression(e[3]))
labels <- "e[1],e[2],e[3]"
axis(1, at=c(1,2,3), lab=eval(parse(text=paste("expression(", labels, ")"))))
让我们解开一点:
> paste("expression(", labels, ")")
[1] "expression( e[1],e[2],e[3] )"
> parse(text=paste("expression(", labels, ")"))
expression(expression( e[1],e[2],e[3] ))
> eval(parse(text=paste("expression(", labels, ")")))
expression(e[1], e[2], e[3])
不,你不能只解析labels
,因为:
> parse(text=labels)
Error in parse(text = labels) : <text>:1:5: unexpected ','
1: e[1],
^
并且eval
似乎是正确剥离外部expression
的唯一方法。这个替代出现工作:
> parse(text=paste("expression(", labels, ")"))[[1]]
expression(e[1], e[2], e[3])
但是将它传递给axis
会得到一条关于长度不匹配的莫名其妙的错误消息。我没得到。