如何用空格引用变量名?

时间:2010-12-29 04:15:38

标签: r plot ggplot2

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 个答案:

答案 0 :(得分:23)

答案:因为'x'和'y'被认为是长度为一的字符向量,而不是变量名称。在这里你会发现为什么在R中使用带空格的变量名称是不明智的。或者任何其他编程语言。

要引用带空格的变量名,可以使用hadleys解决方案

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)
}

但是,最好的解决方案是不要使用带空格的变量名。

答案 1 :(得分:3)

使用get并不是更“正式”,实际上我认为相反。正如R帮助说的那样(help("`")),你几乎总能使用包含空格的变量名,如果它被引用。 (通常情况下,正如已经建议的那样使用反引号。)

答案 2 :(得分:3)

在ggplot2邮件列表和MehmetGü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()