Как ссылаться на имя переменной с пробелами?

В ggplot2, как я могу ссылаться на имя переменной с пробелами?

Почему qplot() и ggplot() ломаются при использовании в именах переменных с кавычками?

Например, это работает:

qplot(x,y,data=a)

Но это не так:

qplot("x","y",data=a)

Я спрашиваю, потому что у меня часто есть матрицы данных с пробелами в имени. Например, "Государственный доход". ggplot2 нуждается в кадрах данных; хорошо, я могу конвертировать. Поэтому я хотел бы попробовать что-то вроде:

qplot("State Income","State Ideology",data=as.data.frame(a.matrix))

Это не удается.

В то время как в базовой графике R я бы сделал:

plot(a.matrix[,"State Income"],a.matrix[,"State Ideology"])

Что будет работать.

Любые идеи?

Ответы

Ответ 1

Ответ: потому что 'x' и 'y' считаются символом символа length-one, а не именем переменной. Здесь вы узнаете, почему не разумно использовать имена переменных с пробелами в R. Или любой другой язык программирования в этом отношении.

Чтобы ссылаться на имена переменных с пробелами, вы можете использовать либо решение hasleys

a.matrix <- matrix(rep(1:10,3),ncol=3)
colnames(a.matrix) <- c("a name","another name","a third name")

qplot(`a name`, `another name`,data=as.data.frame(a.matrix)) # backticks!

или более формальный

qplot(get('a name'), get('another name'),data=as.data.frame(a.matrix))

Последний может использоваться в конструкциях, где вы передаете имя переменной в виде строки, например, в конструкции цикла:

for (i in c("another name","a third name")){
    print(qplot(get(i),get("a name"),
      data=as.data.frame(a.matrix),xlab=i,ylab="a name"))
    Sys.sleep(5)
}

Тем не менее, лучшим решением является не использование имен переменных с пробелами.

Ответ 2

Использование get не является более "формальным", на самом деле я бы спорил об обратном. Как говорит R help (help("`")), вы почти всегда можете использовать имя переменной, которое содержит пробелы, если оно указано. (Обычно, с обратной стороной, как уже было предложено.)

Ответ 3

Нечто похожее было задано в списке рассылки ggplot2 и Mehmet Gültaş, связанном с этим сообщением. Другой способ использования строк для построения вашего вызова ggplot - через функцию aes_strings. Обратите внимание, что вам все равно нужно поместить обратные элементы внутри кавычек, чтобы предмет работал для переменных с пробелами.

library(ggplot2)

names(mtcars)[1] <- "em pi dzi"

ggplot(mtcars, aes_string(x = "cyl", y = "`em pi dzi`")) +
  theme_bw() +
  geom_jitter()