4

多くのバイオリン (列) を持つバイオリン プロットをプロットする方法を探しています。問題は、私の列の長さがすべて異なることです。たとえば、次のようなものです。

"V1" "V2"
"V1" 9 255.5
"V2" 432 286
"V3" 161 322.5
"V4" 320.5 277
"V5" 253.5 153.5
"V6" 301 155.5
"V7" 113 218.5
"V8" 341 394
"V9" 138 93.5
........
"V38166" 62 152
"V38167" NA 20.5
"V38168" NA 12
"V38169" NA 40.5
"V38170" NA 88
"V38171" NA 2.5
"V38172" NA 279.5
"V38173" NA 161.5
"V38174" NA 14.5

ご覧のとおり、エントリが少ないため、最初の列にいくつかの NA があります。さらに列が存在する可能性があることに注意してください。問題は、列のいずれかに NA を含むバイオリン プロットを作成できるかどうかです。

私はこれを試しました:

jpeg("violinplot.jpg", width = 1000, height = 1000);
do.call(vioplot,c(statsDataFrame, list(names=nameList)))
dev.off()

statsDataFrame は、上に投稿した完全なデータ フレームです。ただし、スクリプトを実行すると、次のエラーが発生します。

Error in quantile.default(data, 0.25) : 
  missing values and NaN's not allowed if 'na.rm' is FALSE
Calls: do.call -> <Anonymous> -> quantile -> quantile.default
Execution halted

これは本質的にNAについて不平を言っています。私は na.rm = FALSE と na.rm = TRUE の両方を試しました:

jpeg("stats/AllDistanceViolinPlot.jpg", width = 1000, height = 1000);
do.call(vioplot,c(columnViolinDistanceDataUnlist,na.rm=FALSE,list(names=tfListRow)))
dev.off()

jpeg("stats/AllDistanceViolinPlot.jpg", width = 1000, height = 1000);
do.call(vioplot,c(columnViolinDistanceDataUnlist,na.rm=TRUE,list(names=tfListRow)))
dev.off()

しかし、役に立たない。

これを行う方法またはそれが可能かどうかについて、誰か提案はありますか?

ご協力ありがとうございました。

4

1 に答える 1

5

コンテナー データ構造として (長さが異なる列)を持つことを妨げる NA を削除する必要がありますが、リストを取る whichdata.frameも使用したいと考えています。do.callしたがってlapply、各列が s である data.frame の各列から値を削除するために使用します。これは、NAそれぞれがリスト要素として返され、引き続き使用できるためですdo.call(データが と呼ばれていると仮定しますdf)。

do.call( vioplot, lapply(df, function(x) x[!is.na(x)]) )

または@BrianDiggsが指摘するように、さらに簡潔できれいなものを使用できます。

do.call(vioplot, lapply(df, na.omit))
于 2013-07-18T22:29:40.537 に答える