【问题标题】:How to refer to a variable name with spaces?如何用空格引用变量名?
【发布时间】:2010-12-29 04:15:38
【问题描述】:

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

哪个会起作用。

有什么想法吗?

【问题讨论】:

  • 试试state income - 那些是反引号
  • 为了参考,我重新表述了问题以指出真正的问题。
  • 我认为 Hadley 的评论因 StackOverflow cmets 中的降价更改而中断。它应该看起来像这样:`state income`。

标签: r plot ggplot2


【解决方案1】:

答案:因为 'x' 和 'y' 被认为是长度为 1 的字符向量,而不是变量名。在这里,您会发现为什么在 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)
}

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

【讨论】:

  • 谢谢;这很好用,关于“get”和循环的提示很简洁。我唯一的问题是带空格的名称虽然使用起来更麻烦,但通常更易读,并且通常可以在不重命名的情况下传递给 LaTeX 代码。
【解决方案2】:

使用get 不是更“正式”,实际上我会反对。正如 R 帮助所说 (help("`")),您几乎总是可以使用包含空格的变量名,如果它被引用。 (如前所述,通常使用反引号。)

【讨论】:

    【解决方案3】:

    在 ggplot2 邮件列表和链接到这篇文章的 Mehmet Gü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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      相关资源
      最近更新 更多