Подтвердить что ты не робот

Используйте выражение с переменной 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="")
4b9b3361

Ответ 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. Я просто поставил его там, чтобы быть явным, откуда они взяты.