writing a “.rtest” output to file, using the R program (ex) via write.table?

北战南征 提交于 2019-12-25 00:37:39

问题


I am using R to open up some saved .csv files in a particular pairwise manner and perform a statistical test (mantel.rtest, found in the package "ade4"). The .csv files are sequentially named as either "fileAX" or "fileBY", where X and Y are integers.

I'd like to save the results of this test in a single file, but am running into some issues.

Here's the code (please forgive the inefficient usage of "paste":

library(ade4)

x <- 1:15; y <- 1:15

filename1 <- paste(paste(c("fileA"), 1:15, sep = ""), ".csv", sep = "")
filename2 <- paste(paste(c("fileB"), 1:15, sep = ""), ".csv", sep = "")

for (i in seq(along=x)) {
  M1 <- read.table(paste("C:\\scripts\\", filename1[i], sep = ""), header = FALSE, sep = ",")

  for (j in seq(along=y)) {

    M2 <- read.table(paste("C:\\scripts\\", filename2[j], sep = ""), header = FALSE, sep = ",")

    mantelout <- mantel.rtest(dist(matrix(M1, 9, 9)), dist(matrix(M2, 9, 9)), nrepet = 99)

    write.table(mantelout, file = "C:\\results\\mantelout") 

  }
}

Attempting to do this results in the following error message:

**Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : 
  cannot coerce class '"rtest"' into a data.frame**

I tried to convert "mantelout" to some friendlier format using various functions such as "unlist" and "as.vector", to no avail. Any thoughts?

Thanks, WAW

EDIT: I should note that the output of this test in the R environment looks as follows:

Monte-Carlo test
Observation: 0.5324712
Call: mantel.rtest(m1 = dist(matrix(M1, 9, 9)), m2 = dist(matrix(M2, 9, 9)), nrepet = 99)
Based on 99 replicates
Simulated p-value: 0.01"

回答1:


Use str(rtest) to have a look at the structure of the rtest object: it's no surprise it won't fit in a data.frame. Try putting it in a list instead. You can save the list as a file using save(my.list, file="mylist.RData"), and reload it later using load("mylist.RData").




回答2:


You could use capture.output + writeLines combo:

# example from help("lm")
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group)

writeLines(capture.output(lm.D9), file="my analysis.txt")

In your case should be:

writeLines(capture.output(mantelout), file = "C:\\results\\mantelout") 


来源:https://stackoverflow.com/questions/3354115/writing-a-rtest-output-to-file-using-the-r-program-ex-via-write-table

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!