如何用空格引用变量名?

bsh*_*hor 21 plot r ggplot2

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)

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


Dav*_*nic 6

使用get并不更“正式”,实际上我认为相反。正如 R 帮助所述 ( help("`")),您几乎总是可以使用包含空格的变量名称,只要它被引用即可。(通常,如已经建议的那样,带有反引号。)