2011-07-29 125 views
0

我有許多具有交叉元素列的列表的列表,這裏假設集合1,2,3可以具有1對1,一對多和多對多一對多的關係:在R中計算列表與eVenn的矩陣比較

df1 = data.frame(
    X1 = paste('set100',sample(10,8,replace=TRUE),sep=''), 
    X2 = paste('set200',sample(10,8,replace=TRUE),sep='') 
) 

df2 = data.frame(
    X1 = paste('set100',sample(10,8,replace=TRUE),sep=''), 
    X3 = paste('set300',sample(10,8,replace=TRUE),sep='') 
) 

df3 = data.frame(
    X2 = paste('set100',sample(10,8,replace=TRUE),sep=''), 
    X3 = paste('set300',sample(10,8,replace=TRUE),sep='') 
) 

我想創建兩列清單的合併矩陣,用它們作爲eVenn輸入。在eVenn的4路例如,名單已經在一個對象是這樣的:

> head(res3) 
     liste_1_.194. liste_2_.149. liste_3_.366. Total_lists ratios 
10345445    1    0    0   1 2.159987 
10345762    1    1    0   2 2.223848 
10345791    1    1    1   3 2.519503 
10345824    0    0    0   0  NA 
10346191    0    0    0   0  NA 
10346843    0    0    0   0  NA 
      ratios ratios 
10345445  NA  NA 
10345762 2.085687 2.264225 
10345791 2.518024 2.668271 
10345824  NA 36.246703 
10346191  NA 2.527424 
10346843  NA 3.852753 

我希望能夠調用eVenn命令對合並後的數據是這樣的:

mergedmatrix <- create_the_merged_matrix_somehow(df1,df2,df3) 
evenn(path_lists="test",res=mergedmatrix,ud=TRUE) 

任何想法?

+1

你能否給我們一個[可重現的例子](http://www.stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? –

+0

謝謝,我現在編輯了一下,希望它更好。 – 719016

+1

@avilella,我從來沒有聽說過eVenn,但看起來你想要做的事情可以用不需要eVenn知識的方式來表達。 res3數據如何形成?它是某種頻率表嗎?比例是多少?當你說,「合併矩陣」我想你是指某種類型的連接,或'merge()',但在你的df1-df3數據幀中的值看起來像res3的列標題。你能澄清嗎? –

回答

1

不幸的是,你的例子很難遵循。我建議你避免使用eVenn包。包文檔非常有限,並且這些示例非常神祕。它不會在標準X11(在unix系統上)顯示中產生數字,而只會將結果打印到文件中。

我建議你考慮limma包,availableBioconductor。它具有製作漂亮維恩圖的功能。你可以看到一些例子here

我想你所說的create_the_merged_matrix_somehow()將由vennCounts()limma解決。

+0

感謝nullglob,我最終在limma中使用了vennCounts和vennDiagram。我花了一些時間來弄清楚我的清單的合併情況,但之後都很好。 – 719016