Hi Rui,
 
A while ago you helped me with calculaing all possible ratios from a dataset.
 
This is the code I am using as suggested by you.
 
data <- read.table("new_data.txt", header=T, row.names=1, sep="\t")
pairwise.ratios <- function(x, prefix="probeset", char=":"){
        n <- ncol(x)
        cn <- colnames(x)
        if(length(cn) == 0){
                cn <- gsub(" ", "0", formatC(seq.int(n), width=nchar(n)))
                cn <- paste(prefix, cn, sep="")
        }
        cmb <- combn(n, 2)
        r1 <- apply(cmb, 2, function(j) x[, j[1]]/x[, j[2]])
        r2 <- apply(cmb, 2, function(j) x[, j[2]]/x[, j[1]])
        colnames(r1) <- apply(cmb, 2, function(j) paste(cn[j], collapse=char))
        colnames(r2) <- apply(cmb, 2, function(j) paste(cn[rev(j)], 
collapse=char))
        cbind(r1, r2)[, order(c(colnames(r1), colnames(r2)))]
}
results <- pairwise.ratios(data.t)
write.table(t(results), "ratios_results.txt", sep="\t")
 
It works perfectly fine only that it gives both pairs of ratios a:b and b:a for 
any two variables a and b.
Can you suggest me a way so that I get only one ratio and not both (Combination 
with caring for the order and not Permutation??)
 
Thanks for any help.
 
Best Regards,
Som.

 



Date: Sat, 12 May 2012 15:20:52 -0700
From: [email protected]
To: [email protected]
Subject: RE: Calculating all possible ratios

Hello, 

Nothing wrong with me, maybe your R session has some conflicting objects. 
Running the function in the previous post on the first 4 rows and first 6 
columns of your dataset the result was (copy&paste to your session) 

result <- structure(c(8.74714923153198, 1.83094400392095, 9.92065138471113, 
1.77145415014708, 1.01515180575001, 0.167175438316099, 0.222321656865252, 
0.155576771874649, 3.09417748158541, 0.469647988505747, 1.29398633565582, 
0.524043736521509, 3.75969597954255, 0.422694576901317, 9.75471698113208, 
0.290397651827521, 4.9035575319622, 1.00105273231888, 1.01093964697178, 
0.26895145631068, 0.114322960947685, 0.546166347992352, 0.100799832714726, 
0.564507977763338, 0.11605516024473, 0.0913055986191245, 0.0224099858208782, 
0.0878243288779063, 0.353735531392494, 0.256505926724138, 0.130433606169248, 
0.295826869963301, 0.42981957664441, 0.230861553382365, 0.983273839877614, 
0.163931791180376, 0.56058921623124, 0.546741314958369, 0.10190254729944, 
0.151825242718447, 0.9850743448771, 5.98173996175908, 4.49798734905118, 
6.4276947512815, 8.61659229879359, 10.9522309159971, 44.6229644227777, 
11.3863665430362, 3.04799485560622, 2.8093121408046, 5.82033416762497, 
3.36839317468124, 3.70358005398494, 2.52844904226946, 43.8765935747068, 
1.86658746243623, 4.83036872336483, 5.98803713273998, 4.54719374273333, 
1.72873786407767, 0.323187666496628, 2.12925430210325, 0.772805687699305, 
1.90823767237023, 2.82697074863659, 3.89854539725884, 7.66673581578674, 
3.38035554418724, 0.328084543240185, 0.35595902124055, 0.1718114409242, 
0.296877457036954, 1.21508737036511, 0.900024246342843, 7.53850076491586, 
0.554147739185128, 1.58476931628683, 2.13149583692219, 0.781259909100518, 
0.513223300970874, 0.265978952936953, 2.36577437858509, 0.102514506769826, 
3.44355401535389, 2.32655759378615, 4.33160041310018, 1.01701068353905, 
6.10009805175427, 0.270009014365446, 0.395499368696959, 0.0227911949977918, 
0.535737017484743, 0.822986086753186, 1.11108117816092, 0.132652370966651, 
1.8045729131197, 1.30424309801742, 2.36826490573261, 0.103635979283374, 
0.926148867313916, 0.203933571388086, 0.998948374760994, 0.989178733859585, 
3.71814309436142, 1.78383738225087, 1.82901853699522, 9.81329737579089, 
6.58652001534723, 0.207023533247665, 0.166999632405824, 0.219915855047535, 
0.578456699988768, 0.631006664328306, 0.469154094827586, 1.27998376513563, 
1.9484696000908, 0.76672822844154, 0.422250060615857, 9.64915859255482, 
1.07974002376127), .Dim = c(4L, 30L), .Dimnames = list(c("S1", 
"S2", "S3", "S4"), c("P1:P2", "P1:P3", "P1:P4", "P1:P5", "P1:P6", 
"P2:P1", "P2:P3", "P2:P4", "P2:P5", "P2:P6", "P3:P1", "P3:P2", 
"P3:P4", "P3:P5", "P3:P6", "P4:P1", "P4:P2", "P4:P3", "P4:P5", 
"P4:P6", "P5:P1", "P5:P2", "P5:P3", "P5:P4", "P5:P6", "P6:P1", 
"P6:P2", "P6:P3", "P6:P4", "P6:P5"))) 

Rui Barradas 




genome1976 wrote
Hi Rui, 
Thanks once again. I really appreciate it. 
I tried using the code with the following dataset: 




  
  
  Sample 
  P1 
  P2 
  P3 
  P4 
  P5 
  P6 
  P7 
  P8 
  P9 
  P10 
  
  
  S1 
  5292.9 
  605.1 
  5213.9 
  1710.6 
  1407.8 
  1079.4 
  1379.6 
  9321.4 
  6951 
  1205.8 
  
  
  S2 
  104.6 
  57.129 
  625.69 
  222.72 
  247.46 
  104.49 
  330.29 
  1863.7 
  389.67 
  216.29 
  
  
  S3 
  191.29 
  19.282 
  860.42 
  147.83 
  19.61 
  189.22 
  203.27 
  1799 
  369.9 
  175.73 
  
  
  S4 
  41.553 
  23.457 
  267.09 
  79.293 
  143.09 
  154.5 
  52.567 
  613.54 
  408.86 
  61.715 
  
  
  S5 
  671.33 
  19.076 
  1040.9 
  319.04 
  50.766 
  57.445 
  50.005 
  1615.5 
  1149.1 
  163.99 
  
  
  S6 
  125.9 
  22.296 
  563.83 
  236.36 
  112.38 
  81.581 
  48.406 
  2073.6 
  388.4 
  62.575 
  
  
  S7 
  78.485 
  18.152 
  248.18 
  156.19 
  322.4 
  162.01 
  38.379 
  2786.8 
  630.63 
  71.163 
  
  
  S8 
  1355.6 
  51.534 
  422.51 
  134.89 
  202.34 
  48.368 
  69.45 
  231.11 
  1875.9 
  153.18 
  
  
  S9 
  2167.6 
  45.244 
  430.73 
  262.19 
  365.71 
  116.49 
  65.663 
  151.04 
  3071.5 
  210.55 
  
  
  S10 
  575.7 
  24.699 
  170.09 
  128.64 
  42.58 
  31.034 
  55.256 
  294.67 
  448.05 
  226.19 
  
  
  S11 
  234.22 
  22.594 
  944.54 
  118.91 
  16.994 
  102.67 
  199.32 
  2300 
  192.38 
  108.3 
  
  
  S12 
  193.38 
  25.374 
  829.88 
  74.872 
  108.1 
  116.49 
  175.49 
  1248 
  340.33 
  65.022 
  
  
  S13 
  60.43 
  15.907 
  947.23 
  49.12 
  62.992 
  189.11 
  27.348 
  134.46 
  209.66 
  67.638 
  
  
  S14 
  94.563 
  23.304 
  303.25 
  36.745 
  220.11 
  128.72 
  33.242 
  135.6 
  263.31 
  107.4 
  
  
  S15 
  44.379 
  17.794 
  768 
  26.144 
  49.329 
  103 
  26.782 
  290.04 
  151.63 
  66.928 
  
  
  S16 
  42.333 
  14.671 
  224.49 
  19.642 
  100.96 
  82.624 
  42.736 
  94.781 
  182.99 
  68.087 
  
  
  S17 
  528.59 
  49.81 
  685.29 
  24.981 
  106.7 
  72.219 
  114.44 
  610.74 
  1779.9 
  245.57 
  

When I run the code, this is what I get : 

     probeset1:probeset2 probeset1:probeset3 probeset1:probeset4 
[1,]           0.2000000           0.1111111          0.07692308 
[2,]           0.3333333           0.2000000          0.14285714 
[3,]           0.4285714           0.2727273          0.20000000 
[4,]           0.5000000           0.3333333          0.25000000 
     probeset1:probeset5 probeset1:probeset6 probeset2:probeset1 
[1,]          0.05882353          0.04761905            5.000000 
[2,]          0.11111111          0.09090909            3.000000 
[3,]          0.15789474          0.13043478            2.333333 
[4,]          0.20000000          0.16666667            2.000000 
     probeset2:probeset3 probeset2:probeset4 probeset2:probeset5 
[1,]           0.5555556           0.3846154           0.2941176 
[2,]           0.6000000           0.4285714           0.3333333 
[3,]           0.6363636           0.4666667           0.3684211 
[4,]           0.6666667           0.5000000           0.4000000 
     probeset2:probeset6 probeset3:probeset1 probeset3:probeset2 
[1,]           0.2380952            9.000000            1.800000 
[2,]           0.2727273            5.000000            1.666667 
[3,]           0.3043478            3.666667            1.571429 
[4,]           0.3333333            3.000000            1.500000 
     probeset3:probeset4 probeset3:probeset5 probeset3:probeset6 
[1,]           0.6923077           0.5294118           0.4285714 
[2,]           0.7142857           0.5555556           0.4545455 
[3,]           0.7333333           0.5789474           0.4782609 
[4,]           0.7500000           0.6000000           0.5000000 
     probeset4:probeset1 probeset4:probeset2 probeset4:probeset3 
[1,]                  13            2.600000            1.444444 
[2,]                   7            2.333333            1.400000 
[3,]                   5            2.142857            1.363636 
[4,]                   4            2.000000            1.333333 
     probeset4:probeset5 probeset4:probeset6 probeset5:probeset1 
[1,]           0.7647059           0.6190476           17.000000 
[2,]           0.7777778           0.6363636            9.000000 
[3,]           0.7894737           0.6521739            6.333333 
[4,]           0.8000000           0.6666667            5.000000 
     probeset5:probeset2 probeset5:probeset3 probeset5:probeset4 
[1,]            3.400000            1.888889            1.307692 
[2,]            3.000000            1.800000            1.285714 
[3,]            2.714286            1.727273            1.266667 
[4,]            2.500000            1.666667            1.250000 
     probeset5:probeset6 probeset6:probeset1 probeset6:probeset2 
[1,]           0.8095238           21.000000            4.200000 
[2,]           0.8181818           11.000000            3.666667 
[3,]           0.8260870            7.666667            3.285714 
[4,]           0.8333333            6.000000            3.000000 
     probeset6:probeset3 probeset6:probeset4 probeset6:probeset5 
[1,]            2.333333            1.615385            1.235294 
[2,]            2.200000            1.571429            1.222222 
[3,]            2.090909            1.533333            1.210526 
[4,]            2.000000            1.500000            1.200000 


As you can see P1:P2 is not 0.2000000 as indicated by the results of the code. 

Am I doing something wrong? 

Thanks once again. 
Som. 

Date: Sat, 12 May 2012 14:04:11 -0700 
From: [hidden email]
To: [hidden email]
Subject: RE: Calculating all possible ratios 



        Hello, 


I'm glad it helped. Now to make the result readable. (I had thought of it.) 


pairwise.ratios <- function(x, prefix="probeset", char=":"){ 

        n <- ncol(x) 

        cn <- colnames(x) 

        if(length(cn) == 0){ 

                cn <- gsub(" ", "0", formatC(seq.int(n), width=nchar(n))) 

                cn <- paste(prefix, cn, sep="") 

        } 

        cmb <- combn(n, 2) 

        r1 <- apply(cmb, 2, function(j) x[, j[1]]/x[, j[2]]) 

        r2 <- apply(cmb, 2, function(j) x[, j[2]]/x[, j[1]]) 

        colnames(r1) <- apply(cmb, 2, function(j) paste(cn[j], collapse=char)) 

        colnames(r2) <- apply(cmb, 2, function(j) paste(cn[rev(j)], 
collapse=char)) 

        cbind(r1, r2)[, order(c(colnames(r1), colnames(r2)))] 

} 


m1 <- matrix(1:24, ncol=6) 

pairwise.ratios(m1) 


Rui Barradas 


genome1976 wrote 
Thanks so much Rui. I really appreciate all the help. 


I implemented the code and it ran fine. I was wondering how I could include the 
probeset ids as probeset1:probeset2 in the final output so that I know which 
ratios are for which probeset pairs. 



Thanks so much. 

Som. 

Date: Sat, 12 May 2012 09:29:54 -0700 

From: [hidden email] 
To: [hidden email] 
Subject: Re: Calculating all possible ratios 




        Hello, 



If by all possible gene ratios you mean all pairwise column ratios, try 


the following. 



# Make up some data 


x <- matrix(1:24, ncol=6) 



cmb <- combn(ncol(x), 2) 


r1 <- apply(cmb, 2, function(j) x[, j[1]]/x[, j[2]]) 


r2 <- apply(cmb, 2, function(j) x[, j[2]]/x[, j[1]]) 


cbind(r1, r2) 



Note that the dataset must be a numeric only matrix or data.frame. 



Hope this helps, 



Rui Barradas 



Em 12-05-2012 11:00, [hidden email] escreveu: 


> Date: Fri, 11 May 2012 12:39:23 -0700 (PDT) 


> From: genome1976<[hidden email]> 


> To:[hidden email] 


> Subject: [R] Calculating all possible ratios 


> Message-ID:<[hidden email]> 


> Content-Type: text/plain 


> 


> I have a data matrix with  genes as columns and samples as rows. I want to 


> create all possible gene ratios.Is there an elegant and fast way to do it in 


> R and write it to a dataframe? 


> 


> Thanks for any help. 


> Som. 


> 


> -- 


> View this message in 
> context:http://r.789695.n4.nabble.com/Calculating-all-possible-ratios-tp4627405.html
> Sent from the R help mailing list archive at Nabble.com. 


> [[alternative HTML version deleted]] 


> 


______________________________________________ 


[hidden email] mailing list 


https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code. 



        

        


        


        

        

                If you reply to this email, your message will be added to the 
discussion below: 

                
http://r.789695.n4.nabble.com/Calculating-all-possible-ratios-tp4627405p4629105.html
        

        

                

                To unsubscribe from Calculating all possible ratios, click 
here. 


                NAML 



        
        

        

        
        
                If you reply to this email, your message will be added to the 
discussion below: 
                
http://r.789695.n4.nabble.com/Calculating-all-possible-ratios-tp4627405p4629513.html
        
        
                
                To unsubscribe from Calculating all possible ratios, click 
here. 

                NAML 





If you reply to this email, your message will be added to the discussion 
below:http://r.789695.n4.nabble.com/Calculating-all-possible-ratios-tp4627405p4629656.html
 
To unsubscribe from Calculating all possible ratios, click here.
NAML                                      



--
View this message in context: 
http://r.789695.n4.nabble.com/Calculating-all-possible-ratios-tp4627405p4645098.html
Sent from the R help mailing list archive at Nabble.com.
        [[alternative HTML version deleted]]

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to