使用带有变量r的表达式

时间:2013-02-25 18:46:17

标签: r expression

我正在尝试使用以下标签标记图:

“一些分析EC50(uM)”,其中“u”是微符号。

我目前有:

assay <- "Some Assay"
plot(0,xlab=expression(paste(assay," AC50 (",mu,"M)",sep="")))

但是这给出了:“测定EC50(uM)”而不是所需的“某些测定EC50(uM)”。

连连呢?感谢。

我也尝试过:

paste(assay,expression(paste(" AC50 (",mu,"M)",sep="")),sep="")

4 个答案:

答案 0 :(得分:40)

你想要bquote()和一些plotmath fu的组合:

assay <- "Some Assay"
xlab <- bquote(.(assay) ~ AC50 ~ (mu*M))
plot(0, xlab = xlab)

~是间距运算符,*表示将内容并置到运算符的左侧和右侧。在bquote()中,.( )中包含的任何内容都将被查找并替换为命名对象的值;因此,.(assay)将在Some Assay的表达式中替换。

答案 1 :(得分:3)

你也可以尝试穷人的做法:

assay <- "Some Assay"
plot(0, xlab = paste0(assay, " AC50 (µM)"))

它直接指定mu字符而不是使用表达式(而paste0pastesep = "")。

答案 2 :(得分:3)

使用mtext和bquote

的其他选项
plot(0,xlab='')
Lines <- list(bquote(paste(assay," AC50 (",mu,"M)",sep="")))
mtext(do.call(expression, Lines),side=1,line=3)

请注意,我在第一个图中将xlab设置为null。

修改 无需调用表达式,因为bquote将创建一个表达式,用它们的值替换。()中包含的元素。所以好消息是:

plot(0,xlab='')
Lines <- bquote(paste(.(assay)," AC50 (",mu,"M)",sep=""))
mtext(Lines,side=1,line=3)

答案 3 :(得分:1)

您可以使用tidy_eval方法

library(rlang)

assay <- "Some Assay"
plot(0,xlab=expr(paste(!!assay," AC50 (",mu,"M)",sep="")))

expr和!!包含在tidyverse中,因此您实际上不需要加载rlang。我只是说清楚它们的来源。