Используйте выражение с переменной r
Я пытаюсь пометить график следующим ярлыком:
"Некоторые анализы EC50 (uM)", где "u" является микросимволом.
В настоящее время у меня есть:
assay <- "Some Assay"
plot(0,xlab=expression(paste(assay," AC50 (",mu,"M)",sep="")))
Но это дает: "анализ EC50 (uM)", а не желаемый "Some Assay EC50 (uM)".
Предложения? Спасибо.
Я также пробовал:
paste(assay,expression(paste(" AC50 (",mu,"M)",sep="")),sep="")
Ответы
Ответ 1
Вам нужна комбинация bquote()
и бит plotmath fu:
assay <- "Some Assay"
xlab <- bquote(.(assay) ~ AC50 ~ (mu*M))
plot(0, xlab = xlab)
~
- это оператор расстояния, а *
означает сопоставление содержимого слева и справа от оператора. В bquote()
все, что завернуто в .( )
, будет просмотрено и заменено значением именованного объекта; поэтому .(assay)
будет заменено в выражении с помощью Some Assay
.
Ответ 2
другой вариант с использованием 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
Вы также можете попробовать подход бедного человека:
assay <- "Some Assay"
plot(0, xlab = paste0(assay, " AC50 (µM)"))
Он указывает символ mu напрямую, а не использует выражения (а paste0
- это просто paste
с sep = ""
).
Ответ 4
Используя tidy_eval подход, вы можете сделать
library(rlang)
assay <- "Some Assay"
plot(0,xlab=expr(paste(!!assay," AC50 (",mu,"M)",sep="")))
expr и !! включены в tidyverse, поэтому вам не нужно загружать rlang. Я просто поставил его там, чтобы быть явным, откуда они взяты.