web-dev-qa-db-ja.com

スペースで変数名を参照する方法は?

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

うまくいくでしょう。

何か案は?

21
bshor

回答:「x」と「y」は、変数名ではなく長さ1の文字ベクトルと見なされるためです。ここでは、Rでスペースを含む変数名を使用するのが賢くない理由を発見します。それ以外のプログラミング言語についても同様です。

スペースを含む変数名を参照するには、どちらのハドリー解を使用できます

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)
}

それでも、最善の解決策は、スペースを含む変数名を使用しないことです。

23
Joris Meys

同様の何かが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()
3
Roman Luštrik

getを使用することは、より「形式的な」ものではなく、実際には反対のことを主張します。 Rヘルプが(help("`"))と言っているように、ほとんどの場合、スペースを含む変数名を使用できます引用符で囲まれている場合。 (通常、既に推奨されているように、バックティックを使用します。)

3
Davor Cubranic