DianaHelen
DianaHelen

Reputation: 111

writing p-values to file in R

Can someone help me with this piece of code. In a loop I'm saving p-values in f and then I want to write the p-values to a file but I don't know which function to use to write to file. I'm getting error with write function.

{
f = fisher.test(x, y = NULL, hybrid = FALSE, alternative = "greater",
                conf.int = TRUE, conf.level = 0.95, simulate.p.value = FALSE)

write(f, file="fisher_pvalues.txt", sep=" ", append=TRUE)
}

Error in cat(list(...), file, sep, fill, labels, append) : 
  argument 1 (type 'list') cannot be handled by 'cat'

Upvotes: 5

Views: 2413

Answers (2)

Josh O'Brien
Josh O'Brien

Reputation: 162311

f is an object of class 'htest', so writing it to a file will write much more than just the p-value.

If you do want to simply save a written representation of the results to a file, just as they appear on the screen, you can use capture.output() to do so:

Convictions <-
   matrix(c(2, 10, 15, 3),
          nrow = 2,
          dimnames =
          list(c("Dizygotic", "Monozygotic"),
               c("Convicted", "Not convicted")))
 f <- fisher.test(Convictions, alternative = "less")

 capture.output(f, file="fisher_pvalues.txt", append=TRUE)

More likely, you want to just store the p-value. In that case you need to extract it from f before writing it to the file, using code something like this:

 write(paste("p-value from Experiment 1:", f$p.value, "\n"), 
       file = "fisher_pvalues.txt", append=TRUE)

Upvotes: 4

Spacedman
Spacedman

Reputation: 94162

The return value from fisher.test is (if you read the docs):

Value:

 A list with class ‘"htest"’ containing the following components:

p.value: the p-value of the test.

conf.int: a confidence interval for the odds ratio. Only present in the 2 by 2 case and if argument ‘conf.int = TRUE’.

etc etc. R doesn't know how to write things like that to a file. More precisely, it doesn't know how YOU want it written to a file.

If you just want to write the p value, then get the p value and write that:

 write(f$p.value,file="foo.values",append=TRUE)

Upvotes: 6

Related Questions