在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"])
哪个会奏效。
有什么想法吗?
答案 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()