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: [hidden email]
To: [hidden email]
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]]
______________________________________________
[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.