Форматирование вывода в R - PullRequest
1 голос
/ 16 августа 2011

Я новичок в R и пытаюсь провести некоторый корреляционный анализ на нескольких наборах данных.Я могу сделать анализ, но я пытаюсь выяснить, как я могу вывести результаты моих данных.Я хотел бы иметь вывод, подобный следующему:

 NAME,COR1,COR2
 ....,....,....
 ....,....,....

Если бы я мог записать такой файл для вывода, то я могу опубликовать его при необходимости.Мой сценарий обработки выглядит следующим образом:

run_analysis <- function(logfile, name)
{
  preds <- read.table(logfile, header=T, sep=",")

  # do something with the data: create some_col, another_col, etc.

  result1 <- cor(some_col, another_col)
  result1 <- cor(some_col2, another_col2)

  # somehow output name,result1,result2 to a CSV file
 }

args <- commandArgs(trailingOnly = TRUE)
date <- args[1]
basepath <- args[2]
logbase <- paste(basepath, date, sep="/")
logfile_pattern <- paste( "*", date, "csv", sep=".")
logfiles <- list.files(path=logbase, pattern=logfile_pattern)

for (f in logfiles) {
  name = unlist(strsplit(f,"\\."))[1]
  logfile = paste(logbase, f, sep="/")
  run_analysis(logfile, name)
}

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

Ответы [ 2 ]

4 голосов
/ 16 августа 2011

Вы смотрели на функции в R для записи данных в файлы? Например, write.csv. Возможно, что-то вроде этого:

rs <- data.frame(name = name, COR1 = result1, COR2 = result2)
write.csv(rs,"path/to/file",append = TRUE,...)
2 голосов
/ 16 августа 2011

Мне нравится использовать библиотеку foreach для такого рода вещей:

library(foreach)

run_analysis <- function(logfile, name) {
  preds <- read.table(logfile, header=T, sep=",")
  # do something with the data: create some_col, another_col, etc.
  result1 <- cor(some_col, another_col)
  result2 <- cor(some_col2, another_col2)

  # Return one row of results.
  data.frame(name=name, cor1=result1, cor2=result2)
}

args <- commandArgs(trailingOnly = TRUE)
date <- args[1]
basepath <- args[2]
logbase <- paste(basepath, date, sep="/")
logfile_pattern <- paste( "*", date, "csv", sep=".")
logfiles <- list.files(path=logbase, pattern=logfile_pattern)

## Collect results from run_analysis into a table, by rows.
dat <- foreach (f=logfiles, .combine="rbind") %do% {
  name = unlist(strsplit(f,"\\."))[1]
  logfile = paste(logbase, f, sep="/")
  run_analysis(logfile, name)
}

## Write output.
write.csv(dat, "output.dat", quote=FALSE)

Для этого нужно генерировать одну строку вывода при каждом вызове run_analysis, связывая их в одну таблицу с именем dat (.combine="rbind" часть вызова foreach вызывает r ow bind ing).Тогда вы можете просто использовать write.csv, чтобы получить желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...