3

これは正常に機能します

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]"))  )

しかし、これも機能しませんでした。なにか提案を?

4

2 に答える 2

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])
于 2012-07-11T19:05:54.893 に答える
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])

いいえ、単に parse することはできません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、長さが一致しないという不可解なエラー メッセージが表示されます。私は何も手に入れませんでした。

于 2012-07-11T18:44:38.980 に答える