about a p-value < 2.2e-16 Although the question has been asked before, I hope that you do not mind if I am asking it again in our specific circumstances / context.
I would appreciate having your advice on the following:
in R, the wilcox.test() provides "a p-value < 2.2e-16", when we compare sets of 1,000 genes expression (in the genomics field).
However, the journal asks us to provide the exact $p$-value.
Would it be legitimate to write : "p-value = 0" ?
 A: The correct answer is to ask the journal how to proceed.
Regarding the statistics, you don’t what the exact p-value is. Remember that the p-value is some kind of integral of a density. When you get out that far in the tail of a density, the numerical methods break down, and the value gets sensitive to violations of test assumptions. Is is $10^{-16}$ or $10^{-17}$ or $10^{-14}?$ Who knows!? But it also does not matter. The number you’re getting is R’s way of telling you that the answer is basically zero.
A: You would hope the editors are sensible people and they are not going to insist on the exact p-value for something in the region of 1e-16. I would just report p < 2.2e-16 in the manuscript with a note to the editor saying that you cannot be more precise than that and it probably you don't need to.
I would much prefer that than reporting 'p = 0' since that is not really meaningful and it can be misleading since it's not clear how close you were to zero.
After all, what does it even mean exact value? How many decimal places? What it is the exact value of $\pi$? As far as your computing facilities go, your exact p-value is 'p < 1e-16' because you cannot do better than that.
A: You should be able to access the exact p-value no problem in R!
Here is a reproducible example showing what I mean (the data comes from the documentation, see ?wilcox.test):
x <- c(1.83,  0.50,  1.62,  2.48, 1.68, 1.88, 1.55, 3.06, 1.30)
y <- c(0.878, 0.647, 0.598, 2.05, 1.06, 1.29, 1.06, 3.14, 1.29)
result=wilcox.test(x, y, paired = TRUE, alternative = "greater")

print(result)
# It prints p-value = 0.02

print(result$p.value)
# [1] 0.0195

You'll get some rounded form of the p-value if you print(result) because it looks better formatted that way, but you can access the exact value as shown in the snippet.
PS: The p-value cannot be exactly equal to 0 in this case. At best it will be numerically equal to 0 if the number is too small for the software to handle (see the link below).  I would report the exact p-value as asked by the journal (even it's not the most sensible thing, so long it makes them happy) ; and if it shows 0 I would at least write numerically equal to 0.
Relevant with a great answer: How should tiny $p$-values be reported? (and why does R put a minimum on 2.22e-16?)
