2

私はこのデータフレームを持っています:

set.seed(50)
data <- data.frame(age=c(rep("juv", 10), rep("ad", 10)),
                   sex=c(rep("m", 10), rep("f", 10)),
                   size=c(rep("large", 10), rep("small", 10)),
                   length=rnorm(20),
                   width=rnorm(20),
                   height=rnorm(20))

   age sex  size      length       width      height
1  juv   m large  0.54966989 -0.34992735  0.10955641
2  juv   m large -0.84160374 -0.58689714 -0.41341885
3  juv   m large  0.03299794 -1.58987765  0.11179591
4  juv   m large  0.52414971  1.68955955 -2.89232140
5  juv   m large -1.72760411  0.56358364  0.09534935
6  juv   m large -0.27786453  2.66763339  0.49988990
7  juv   m large  0.36082844  0.35653495  0.94937215
8  juv   m large -0.59091244 -0.36212039 -1.65840096
9  juv   m large  0.97559055  0.56874633 -1.48161964
10 juv   m large -1.44574995  0.02867454 -0.49068623
11  ad   f small  0.29520677  0.19902339  0.01475390
12  ad   f small  0.55475223 -0.85142228  0.33763747
13  ad   f small -0.49863554 -1.13044947 -1.96590570
14  ad   f small  0.19573384  0.59724896 -2.32077461
15  ad   f small -0.45554055 -1.09604786  0.99581082
16  ad   f small -0.36285547  0.01909655  1.16695158
17  ad   f small -0.15681338  0.41619898 -0.86517483
18  ad   f small -0.76525139  1.83967570 -1.39094651
19  ad   f small -1.16601736  0.40618657 -1.33263085
20  ad   f small -0.32342568  0.39322175 -0.13883976

関数を呼び出すことで、 、 、およびの各レベルに対してlengthwidthおよびの箱ひげ図を作成したいと考えています。したがって、出力は 9 つの異なるプロットになるはずです (そして、9 つのプロットのそれぞれには、レベルごとに 2 つの「ボックス」が含まれている必要があります。heightagesexsize

私はこの機能を試しました:

exploreBoxplots <- function (dataframe, x.variables, y.variables) {
  library(plyr); library(ggplot2)
  xVariables <- list(x.variables)
  yVariables <- list(y.variables)
  llply(xVariables, function(x) ggplot(dataframe, aes(x, yVariables)) +
          geom_boxplot())
}

exploreBoxplots(data,c(data$age, data$sex, data$size), c(data$length, data$width, data$height))

...しかし、これはエラーになります。この関数を取得して9つのボックスプロットを作成するにはどうすればよいですか?

4

1 に答える 1

3

9 つの個別のプロットが必要な場合、私のアプローチは、まず、x 列と y 列の変数名として保存します。

xVariables<-names(data[,1:3])
yVariables<-names(data[,4:6])

次にexpand.grid()、すべての変数を組み合わせてから、列を文字に変換します。

gg<-expand.grid(xVariables,yVariables)
gg<-data.frame(lapply(gg, as.character), stringsAsFactors=FALSE)

apply()これで、プロットを作成するために使用できます。aes_string()x と y の値が変数名として提供されるので、使用することが重要です。

apply(gg,1,function(x) ggplot(data,aes_string(x=x[1],y=x[2]))+geom_boxplot())
于 2013-05-28T07:04:08.520 に答える