Data is already natural log transformed. I want anti natural log
Hi, I have a matrix in which my columns are my samples and rows my genes. How I can write a function in R so that each value in this matrix be e^value?? I mean anti natural log of the values inside this matrix. Whatever I am googling I failed especially I am not allowed to ask in stack overflow.
2 answers
Wait, on which scale are your values currently? Already logged or not?
You literally just want e^value? Then, that's just
2.71828182846^datamatrix
...or
exp(datamatrix)
If they are the natural logged values, then, yes, just use either of:
2.71828182846^datamatrix
exp(datamatrix)
Then, they will be back on the scale they were before natural log transformation, i.e., anti natural log.
Testing:
2.71828182846^log(2)
[1] 2
exp(log(2))
[1] 2
Reversing a log is called exponentiation. To apply a function to every cell of a matrix, you can use the apply() function specifying both rows and columns in the margin parameter. The example below reverses the log2 transformation used for example in microarray data:
exponentiated.data <- apply(log.data, 1:2, function(x) { 2^x})
Umm, 2^log.data is a bit simpler. Of course since OP wants the natural log exp(log.data) would be the equivalent.
Sorry, for example in my natural log transformed matrix for a gene I have 0.0264033375579175, by your function e^x if e= 2.718281828459, now I have 1.026760. Is it right?
Yes / Sim / Sea / Oui / Si
Absolutely no reason to use apply in this case, simple 2^log.data is about 200x faster. (Tested with 1000 by 1000 matrix).
Log in to answer this question.