簡體   English   中英

R - 有許多列的小提琴情節

[英]R - Violin plots with many columns

我試圖繪制一個有很多列的小提琴情節。 我會在這樣的文件中閱讀:

data <- read.table("file.txt", as.is=TRUE);

數據文件將包含許多行,每行都應該是一列。 問題是我事先不知道數據文件將包含多少行。 從我通過研究發現的,我可以制作一個像這樣的小提琴情節:

vioplot(x, y, z, ....);

這會給我一個預設數量的列。 我將如何處理所有行? 此外,我有一個與列對應的字符串列表,因此命名參數也需要類似的方法。

任何幫助表示贊賞。

do.call是所需的成語。

例如

nd <- data.frame(t(data))

現在, vioplot需要一個名為x的參數(其余的傳入... ))

# have the first column called `x`
names(nd)[1] <- 'x'


 do.call('vioplot', nd)
set.seed(101)
write.table(matrix(runif(1000),nrow=10),file="tmpfile.txt")
##

基本上,您希望轉置數據並將其轉換為列列表...

dat <- read.table("tmpfile.txt", as.is=TRUE)
cdat <- as.list(as.data.frame(t(as.matrix(dat))))
names(cdat)[1] <- "x"  ## vioplot() needs the first element to be called 'x'
library(vioplot)

然后使用do.call

do.call(vioplot,cdat)

如果您有要使用的名稱向量:

do.call(vioplot,c(cdat,list(names=nameVector)))

(其他參數將與names一起添加到additional-arguments列表中)

從長遠來看,我建議(1)如果可能的話,按列而不是按行存儲數據; (2)熟悉geom_violin()ggplot2 -它更加靈活。

library(reshape2)
mdat <- melt(t(as.matrix(dat)))  ## convert to long format

現在,數據被存儲為100行×3列數據幀,其中變量Var1 (表示原始數據集中的列)和Var2 (原始數據集中的行,其對應於其中一個變量)。

library(ggplot2)
ggplot(mdat,aes(x=factor(Var2),y=value))+geom_violin()+
   labs(x="variable")

如何使用parseeval動態構建和計算表達式(可能不是一個好方法,但我認為它將滿足您的需求)....

#  Turn rows into columns
nd <- t(data)

#  Explicitly give some names to your columns
colnames(nd) <- paste0( "V",1:ncol(nd) )

#  Make some violin plots
require(vioplot)
eval( parse( text = paste0( "vioplot(" , paste0( paste0( "nd[,\"" , colnames(nd) , "\"]" ) , collapse="," , sep="" ) , ")" ) ) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM