2016-08-25 2 views
3

Вот простой пример:Как индекс греческих символов в выражении R

ylab<-expression(paste(beta, "/ml")) 
plot(1:10, ylab=ylab) 

enter image description here

но если индекс бета используя другую переменную:

unit<-beta 
ylab<-expression(paste(unit, "/ml")) 
plot(1:10, ylab=ylab) 

enter image description here

Мой вопрос заключается в том, как индексировать эти греческие символы в выражении R?

+0

Если вы не получили ошибку со вторыми тремя командами, значит, у вас есть объект данных в вашей рабочей области с именем 'beta'. Вы на самом деле пытаетесь создать текстовые метки на отметках? В противном случае я не вижу ничего, что я бы назвал «индексированием». –

+0

@ 42- не обязательно потому, что бета - базовая функция в базе; поэтому ошибки не ожидается –

+0

О, право. Но все же кажется маловероятным, что OP фактически хотел создать функцию с именем 'unit', которая требует двух аргументов. Моя просьба о разъяснении целей остается. –

ответ

3

Update: Представляется, что было желание передать переменную из-за пределов выражения в экспрессирующий-классифицироваться переменной, построенной за пределами plot вызова. Это кажется гораздо менее сложным, чем при использовании eval(parse(text=paste(...)) строительства:

unit=quote(beta) 
ylab<-bquote(.(unit)/ml) 
plot(1:10, ylab=ylab) 

Урок проиллюстрировано здесь используется quote для предотвращения оценки символа, а затем оценить к имени внутри выражения.

также могли бы использовать либо as.name или as.symbol:

unit=as.name('beta') 

Ответ на вопрос, который я первоначально подозреваемых спрашивается, так как это один (на самом деле два) я боролся с в мои ранние годы Р. I» Предполагалось, что вы хотите создавать метки меток, а не метки оси, и что вы хотите, чтобы они отображались как греческие буквы или другие plotmath -y конструкции, но с восходящими значениями «индексации». Второй запрос требует использования либо substitute, либо bquote, в то время как первый запрос требует запоминания для подавления тиков и таблиц оси y с аргументом par, а затем с использованием axis.

plot(1:10, ylab=ylab,yaxt="n") 
# Now create "horizontally aligned" (using las=2) beta-value tick labels 
axis(2, at=1:10, 
     labels=as.expression(lapply(1:10, function(x) bquote(beta == .(x)))) , 
     las=2) 

as.expression оберткой список bquote -ED-результатов то, что я нашел в предыдущем ответе (от меня), и я думал, что просто маркируя как дубликат, но это не связано с какой-либо заговор так Я решил считать это «частичным перекрытием».

+0

Мне нравится использовать 'quote' и' bquote' для этого. как вы можете изменить для случая, когда 'unit' является вектором символов? (например, beta, mu, phi) –

+0

'unit <- выражение (бета, альфа, mu); as.expression (lapply (1: 3, function (x) bquote (. (Unit [[x]]) ==. (X)))) 'возвращает: выражение (beta == 1L, alpha == 2L , mu == 3L) –

3

первый от beta должны быть в двойных кавычках, так это строка не базовая функция, как отмечает @ 42-

иначе это кажется вы можете вставить строку вместе, а затем оценить его, как это

unit<-"beta" #note double quotes 
txt <- paste0("expression(",unit,"~'/ml')") #built expression as string 
ylab<-eval(parse(text=txt)) #evaluate the expression with parse 
plot(1:10, ylab=ylab) 

enter image description here

Смежные вопросы