Как обратиться к имени переменной с пробелами? - PullRequest
21 голосов
/ 29 декабря 2010

В 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"])

Что бы сработало.

Есть идеи?

Ответы [ 3 ]

23 голосов
/ 29 декабря 2010

Ответ: потому что 'x' и 'y' считаются вектором длиной в один символ, а не именем переменной.Здесь вы узнаете, почему неразумно использовать имена переменных с пробелами в 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)
}

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

3 голосов
/ 25 июня 2016

Нечто подобное было задано в списке рассылки ggplot2, и Мехмет Гюлташ связался с этим постом. Другой способ использования строк для создания вашего вызова 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()
3 голосов
/ 30 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...