Как ссылаться на имя переменной с пробелами?
В 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()