2016-07-19 13 views
0

変数(xdata)を使用して、vioplot関数で表示するデータを定義します。以下の方法で試してみましたが、残念ながら動作しません。どうすればこれを達成できますか?R関数の複数のパラメータの変数

library(vioplot) 
x1 = mtcars$mpg[mtcars$cyl==4] 
x2 = mtcars$mpg[mtcars$cyl==6] 
x3 = mtcars$mpg[mtcars$cyl==8] 
xdata = paste("x1","x2","x3",sep=",") # Try 1 
xdata = c("x1","x2","x3")    # Try 2 
vioplot(xdata, names=c("4 cyl", "6 cyl", "8 cyl"),col="grey") 
+1

変数xdataを定義する理由はありますか?それは必要はありません。 – mkt

答えて

1

あなたが本当に変数としてデータを渡す必要がある場合、do.call関数は、このような方法でトリックを行います:

library("vioplot") 
x1 <- mtcars$mpg[mtcars$cyl==4] 
x2 <- mtcars$mpg[mtcars$cyl==6] 
x3 <- mtcars$mpg[mtcars$cyl==8] 

xdata <- list(x1, x2, x3, names=c("4 cyl", "6 cyl", "8 cyl"), col="grey") 
do.call(vioplot, xdata) 

それともプロットする変数であることが重要ですcharacterとして渡されましたか?

EDIT:重要なことは、あなたcyldata相当listであるということである

cyls <- c(4, 6, 8) 
cyldata <- lapply(cyls, function(cyl) mtcars$mpg[mtcars$cyl == cyl]) 
xdata <- c(cyldata, list(names=paste(cyls, "cyl"), col="grey")) 
do.call(vioplot, xdata) 

はよりダイナミックにそれを行うには、デュこのような何かをすることができます。

+0

だと、フィールド名はcolnamesという名前のベクトルにあります。単純に名前を指定することはできないようですが、どうにかそれらの値をすべて読み取ってxdataリストに含める必要があります。しかし、どうやってそれをすることができますか? – lmocsi

+0

場合のデータフレームにデータが含まれ、これは実行されます。 CNT = 1つの Z =リスト() を(I COLNAMESで){ IF(is.numeric(S [[I])){ Cについて= SUM(!is.na(S [I])) 場合(C> 0){ Z [CNT] = sの[I] CNT = CNT + 1 }}} Z =アペンド(Z 、リスト(names = cn、col = "gray"、horizo​​ntal = TRUE)) do.call(vioplot、z) – lmocsi

+0

@lmocsiあなたの提案どおりにすることができます。しかし、私はあなたがもう少しエレガントにそれをやることができると思います。私はあなたのインスピレーションを与えるために私の答えを編集しました。それは役に立ちますか? –

0

これは簡単です! x1、x2、x3を一緒にペースト/バインド/連結する必要はありません。

vioplot(x1,x2,x3, names=c("4 cyl", "6 cyl", "8 cyl"),col="grey") 
+0

これが出発点でした。 しかし、それを任意のデータソースで使用する場合は、事前に表示する変数がわかりません。 – lmocsi

関連する問題