записать вывод ".rtest" в файл, используя программу R (ex) через write.table? - PullRequest
0 голосов
/ 28 июля 2010

Я использую R, чтобы открыть некоторые сохраненные файлы .csv определенным попарно и выполнить статистический тест (mantel.rtest, находится в пакете "ade4").Файлы .csv последовательно называются либо «fileAX», либо «fileBY», где X и Y - целые числа.

Я хотел бы сохранить результаты этого теста в одном файле, но столкнулся с некоторыми проблемами.

Вот код (прошу прощения за неэффективное использование "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") 

  }
}

Попытка сделать это приводит к следующему сообщению об ошибке:

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

Я попытался преобразовать "mantelout" в более дружественный формат, используя различные функции, такие как "unlist" и "as.vector ", безрезультатно. Есть мысли?

Спасибо, WAW

РЕДАКТИРОВАТЬ: я должен отметить, что вывод этого теста в среде R выглядит следующим образом:

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"

Ответы [ 2 ]

0 голосов
/ 01 февраля 2011

Вы можете использовать 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")

В вашем случае должно быть:

writeLines(capture.output(mantelout), file = "C:\\results\\mantelout") 
0 голосов
/ 28 июля 2010

Используйте str(rtest), чтобы взглянуть на структуру объекта rtest: неудивительно, что он не поместится в data.frame.Попробуйте вместо этого поместить его в список.Вы можете сохранить список в виде файла, используя save(my.list, file="mylist.RData"), и перезагрузить его позже, используя load("mylist.RData").

...