Экспорт данных без фрейма данных в текстовый файл в R

Это код, который я использую, он создает сводку статистических тестов, которые меня интересуют.

library(ape)
library(geiger)
library(caper)

taxatree <- read.tree("newicktest.tre")
LWEVIYRcombodata <- read.csv("LWEVIYR.csv")


LWEVIYRcombodataPGLS <-data.frame(Sum.of.percentage=LWEVIYRcombodata$Sum.of.percentage,OGT=LWEVIYRcombodata$OGT, Species=LWEVIYRcombodata$Species)

LWEVIYRcombodataPGLS$Species<-gsub(" ", "", LWEVIYRcombodataPGLS$Species)

comp.dat <- comparative.data(taxatree, LWEVIYRcombodataPGLS, "Species")

phylo.signal <- pgls((Sum.of.percentage) ~1, data=comp.dat, lambda="ML")

Я вызываю это строкой:

summary(phylo.signal)

А затем сохраните его как переменную:

dataforexport <- summary(phylo.signal)

Однако это не позволит мне распечатать его в обычный текстовый файл или даже в CSV.

При попытке что-то вроде этого:

write.table(dataforexport, file = "test1.txt", sep = "\t", row.names = FALSE)

Я получаю сообщение об ошибке:

Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : 
  cannot coerce class ""summary.pgls"" to a data.frame

Я хочу иметь возможность сохранять результаты моего анализа в текстовый файл или даже в CSV (в идеале добавляя файл, но это еще один вопрос, на который, вероятно, был дан ответ где-то еще)


person Biomage    schedule 14.06.2018    source источник


Ответы (1)


Попробуйте это -

capture.output(summary(phylo.signal), file = "test1.txt")

person EcologyTom    schedule 14.06.2018
comment
Работает отлично, спасибо! Есть ли простой способ заставить его добавить текстовый файл? Не беспокойтесь, если объем этого вопроса больше подходит для другого вопроса! - person Biomage; 14.06.2018
comment
Мне нужно будет превратить это в цикл, чтобы включить тысячи файлов, в идеале я хочу, чтобы все результаты были в одном текстовом файле, поэтому, если есть способ добавить в конец файла .txt, а не просто писать новый файл каждый раз, это было бы здорово! - person Biomage; 14.06.2018
comment
Ага, понятно. Мм, это может быть немного сложно. Вы можете сохранить выходные данные в разные элементы списка, а затем использовать capture output, который просто даст один файл .txt с большим количеством строк, но я думаю, что существует ограничение в 10 000 строк для экспорта таким образом, поэтому это зависит от размера файлы ... Извините, может быть, было бы лучше задать другой вопрос и посмотреть, что могут предложить другие люди. - person EcologyTom; 14.06.2018
comment
Да, это миллион файлов и примерно 10 ГБ данных, поэтому мой план состоит в том, чтобы закрыть цикл и rm(list=ls()) в конце, все, что я хочу сделать, это добавить немного текста в текстовый файл, все остальное было бы слишком много для оперативной памяти, которую я представляю, и R ... - person Biomage; 14.06.2018
comment
В зависимости от того, как вы строите цикл, все, что вы читаете внутри цикла, существует только в этом цикле. Таким образом, в конце каждой итерации любой входной файл будет перезаписан. Вам не нужно rm(list=ls()) - person EcologyTom; 14.06.2018
comment
Возможно, вам лучше пойти по пути выяснения того, что возвращает каждая из функций (часто списки списков). Мне пришлось сделать это, извлекая важные части информации и сохраняя их в пользовательском фрейме данных, который вы затем можете сохранить в конце цикла. Хотя вы работаете с большим количеством файлов, если вам нужна только пара фрагментов информации из каждого вывода функции, она может не стать слишком большой. - person EcologyTom; 14.06.2018