2014-09-26 1 views
0

Я написал сценарий R, который должен использоваться как часть конвейера на основе сценария оболочки, который будет передавать десятки файлов, содержащих данные генетической последовательности, в R сценарий один за другим (с использованием args[]).Написание результатов нескольких сценариев R-сценария на один выходной файл csv

У меня возникли проблемы с поиском способа записи результатов каждого запуска этого скрипта в один файл результатов. Я думал, что самый простой способ сделать это - создать пустую таблицу results.csv, а затем попросить сценарий записывать в следующую строку этого файла каждый раз, когда он выполняется (сохраняет проблему написания скрипта прямо над файлом на каждом прогоне). В этом ключе друг помог мне со следующим кодом:

x<-readLines("results.csv") 

if(x[[1]]==""){x[[1]]<-paste("meancoscore", "meanboot", "CIres", "RIres", "RC", "nodecount", sep= ",")} 

x[[length(x)+1]]<-paste(meancoscore, meanboot, CIres, RIres, RC, nodecount, sep = ",") 
x<-data.frame(x) 
write.table(x,"results.csv", row.names = F, col.names = F, sep = ",") 

В приведенном выше коде «meancoscore», «meanboot», «CIRES», «RIres», «RC», и «nodecount» являются первым используется в качестве заголовка, если в кадре данных ничего нет в первой строке.

После этого результаты (объекты: meancoscore, meanboot, CIres, RIres, RC и nodecount записываются в столбцы, соответствующие их заголовкам. Идея здесь заключается в том, что если вы снова запустите R-скрипт с разными исходными файлами, он должен просто записать результаты на следующую строку в файле results.csv

Однако следующий видно в файле results.csv после трех прогонов этого кода с различными входными файлами:.

"\""\\""meancoscore,meanboot,CIres,RIres,RC,nodecount\\""\"" 
""\""\\""0.000,76.3247863247863,0.721002252252252,0.983235214508053,0.708914804154032,117\\""\"" 
""\""0.845,77.6923076923077,0.723259762308998,0.983410513459875,0.711261254217159,117\"" 
""0.85,77.4358974358974,0.728886344116805,0.983878381369061,0.717135516451654,117" 

Где моим желаемым результатом будет следующее:

meancoscore,meanboot,CIres,RIres,RC,nodecount 
0.000,76.3247863247863,0.721002252252252,0.983235214508053,0.708914804154032,117 
0.845,77.6923076923077,0.723259762308998,0.983410513459875,0.711261254217159,117 
0.85,77.4358974358974,0.728886344116805,0.983878381369061,0.717135516451654,117 

Стоит отметить, что каждое последующее развлечение, похоже, добавляет больше обратных косых черт и больше кавычек в файл results.csv.

В идеале я хотел бы просто прочитать в файле results.csv, когда это будет сделано, и проанализировать данные, обратившись к столбцам с помощью results$meanboot, или summary(results$meanboot), например.

Может ли кто-нибудь предложить некоторые советы о том, как изменить приведенный выше код или предложить альтернативное решение?

Я должен добавить здесь, что я целенаправленно не пошел на возможность записи в сценарий R цикла, который будет запускаться через входные файлы, представляющие интерес, и просто собрать полную таблицу результатов в качестве объекта (я знаю, что это было бы очень просто записать). Это объясняется тем, что работа, выполняемая этим скриптом, будет обрабатываться несколькими компьютерами в кластере.

Спасибо за ваше время и любую помощь, которую вы могли бы предложить.

+1

Просто предположите, но попробуйте установить 'quote = FALSE' в свой вызов' write.table() '. – voidHead

+0

Цитаты, напечатанные в файле, потому что у вас есть значения символов в столбцах. Все ценности принуждают к характеру. Вы должны использовать 'colnames'. –

+2

Почему бы вам не добавить все файлы в сценарий оболочки? Использование '>>'? например [** см. здесь **] (http://stackoverflow.com/a/5586385/1478381) –

ответ

0

Проблема была решена путем добавления quote = FALSE к вызову write.table() по подозрению в voidHead.

Смежные вопросы