использование математической аннотации как фактора в R


Я ссылаюсь на мой предыдущий вопрос , и хочу узнать больше о характеристиках factor в R.

Допустим, у меня есть такой набор данных:

temp <- data.frame(x=letters[1:5],
                   y=1:5)
plot(temp)

Я могу легко изменить метку x на другой символ:

levels(temp[,"x"]) <- letters[6:10]

Но если я хочу изменить его на какой-то expression

levels(temp[,"x"]) <- c(expression(x>=1),
                        expression(x>=2),
                        expression(x>=3),
                        expression(x>=4),
                        expression(x>=5))

Знак >= не изменится соответствующим образом в сюжете. И я обнаружил, что class(levels(temp[,"x"])) есть character, но expression(x>=1) нет.

Если я хочу добавить некоторую математическую аннотацию, как фактор, что я могу сделать?

3 3

3 ответа:

Я не вижу никаких аргументов уровней в ggplot и присвоение levels вектору символов не должно работать. Если вы пытаетесь назначить векторы выражений, вы должны просто использовать один вызов expression и отделить аргументы запятыми, и вы должны использовать аргумент labels в функции масштаба:

 p <- qplot(1:10, 10:1)+ scale_y_continuous( breaks= 1:10, 
                            labels=expression( x>= 1, x>=2, x>=3, x>= 4,x>=5,
                                              x>= 6, x>=7, x>= 8,x>=9, x>= 10) )
 p

Введите описание изображения здесь

Я бы просто оставил их в виде символьных строк

levels(temp[,"x"]) <- paste("x>=", 1:5, sep="")

Если затем вы хотите включить их в качестве меток оси, вы можете сделать что-то вроде следующего, чтобы преобразовать их в выражения:

lev.as.expr <- parse(text=levels(temp[,"x"]))

Для вашего сюжета вы могли бы тогда сделать:

plot(temp, xaxt="n")
axis(side=1, at=1:5, labels=lev.as.expr)

Выражение

Используется для генерации текста для графиков и вывода, но не может быть именами переменных как таковыми. Вам придется использовать команду axis() для создания собственных меток. Потому что он может оценивать выражения, которые вы могли бы попробовать...

plot(temp, xaxt = 'n')
s <- paste('x>', 1:5, sep = '=')
axis(1, 1:5, parse(text = s))