在ggplot2
,如何引用带空格的变量名?
为什么在带引号的变量名上使用qplot()
和ggplot()
中断?
例如,这有效:
qplot(x,y,data=a)
Run Code Online (Sandbox Code Playgroud)
但这不是:
qplot("x","y",data=a)
Run Code Online (Sandbox Code Playgroud)
我问,因为我经常在名称中有空格的数据矩阵.例如,"国家收入".ggplot2需要数据帧; 好的,我可以转换.所以我想尝试类似的东西:
qplot("State Income","State Ideology",data=as.data.frame(a.matrix))
Run Code Online (Sandbox Code Playgroud)
那失败了.
而在基础R图形中,我会这样做:
plot(a.matrix[,"State Income"],a.matrix[,"State Ideology"])
Run Code Online (Sandbox Code Playgroud)
哪个会奏效.
有任何想法吗?
Jor*_*eys 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!
Run Code Online (Sandbox Code Playgroud)
或者更正式
qplot(get('a name'), get('another name'),data=as.data.frame(a.matrix))
Run Code Online (Sandbox Code Playgroud)
后者可以在构造中使用,在这种构造中,您将变量的名称作为字符串传递给例如循环构造:
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)
}
Run Code Online (Sandbox Code Playgroud)
不过,最好的解决方案是不要使用带空格的变量名.
使用get
并不更“正式”,实际上我认为相反。正如 R 帮助所述 ( help("`")
),您几乎总是可以使用包含空格的变量名称,只要它被引用即可。(通常,如已经建议的那样,带有反引号。)