使用带有字符串列名的data.frames调用qplot

时间:2011-06-23 17:21:49

标签: r ggplot2

我创建了一个data.frame:

d <- data.frame("name 1"=1, "name 2"=2)

由于显而易见的原因,调用qplot("name 1", "name 2", data=d)不起作用。是否可以使用某种机制使其工作?我已经尝试了as.name,但这也行不通。

2 个答案:

答案 0 :(得分:4)

这里有两个问题:

  1. 如何使用非标准但语法上有效的组件名称和
  2. 为数据框创建名称组件时R正在做什么。
  3. 我会以相反的顺序拍摄。

    使用data.frame()创建数据框时,默认设置是检查组件的名称是否有效。来自?data.frame我们有:

    check.names: logical.  If ‘TRUE’ then the names of the variables in the
              data frame are checked to ensure that they are syntactically
              valid variable names and are not duplicated.  If necessary
              they are adjusted (by ‘make.names’) so that they are.
    

    对于使用

    创建的OP d,这意味着什么
    d <- data.frame("name 1" = 1, "name 2" = 2)
    

    会有这些名字:

    > names(d)
    [1] "name.1" "name.2"
    

    可以通过

    来抑制此行为
    > names(data.frame("name 1" = 1, "name 2" = 2, check.names = FALSE))
    [1] "name 1" "name 2"
    

    默认行为意味着我们可以执行

    之类的操作
    > d$name.1
    [1] 1
    

    > qplot(name.1, name.2, data=d)
    

    但是,如果您想要输入名称,并使用空格,该怎么办?显然他们不像以前那样工作:

    > d <- data.frame("name 1" = 1, "name 2" = 2, check.names = FALSE)
    > d
      name 1 name 2
    1      1      2
    > d$name 1
    Error: unexpected numeric constant in "d$name 1"
    

    非标准的,语法上有效的名称在使用时需要引用,使用反引号`foo`或正常引号"foo"'foo',例如。

    > d$`name 1`
    [1] 1
    > d$"name 1"
    [1] 1
    > d$'name 1'
    

    但是,在qplot()示例中,引用的组件名称无法按预期工作。该图是根据"name 1""name 2"的字符值绘制的,而不是12

答案 1 :(得分:2)

您可以使用反引号将字符串转换为符号:

qplot(`name 1`, `name 2`, data=d)

很高兴听到这种方法有效;)