запись содержимого списка в один файл в R - PullRequest
3 голосов
/ 28 марта 2012

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

Я пробовал это:

 dflist = lapply(1:4, function(x){df = data.frame(SID=paste("S",1:10,sep=""),matrix(runif(100),nrow=10,ncol=10))})
 sumlist  = lapply(dflist, function(df){summary(df)})
lapply(sumlist, function(i){write(i,"all_data_summary.txt",append=T )})

и это вроде работает, но записывает уровни суммирования каждой переменной в новую строку и не включает в себя имя переменной, например:

S1     :1  
S10    :1  
S2     :1  
S3     :1  
S4     :1  
S5     :1  
(Other):4  
Min.   :0.1557  
1st Qu.:0.2284  
Median :0.5109  
Mean   :0.4707  
3rd Qu.:0.6471  
Max.   :0.9509  
NA
Min.   :0.05512  
1st Qu.:0.14310  
Median :0.20889  
Mean   :0.41891  
3rd Qu.:0.78261  
Max.   :0.97565  
NA
Min.   :0.01937  
1st Qu.:0.23876  
Median :0.57103  
Mean   :0.50806  
3rd Qu.:0.70491  
Max.   :0.95610  
NA
Min.   :0.0212  
1st Qu.:0.3445  
Median :0.5634  
Mean   :0.5554  
3rd Qu.:0.7484  
Max.   :0.9797 

Я бы хотел, чтобы вывод имел вид:

List Element 1              
SID X1  X2  X3  X4
S1     :1   Min.   :0.1557      Min.   :0.05512     Min.   :0.01937     Min.   :0.0212  
S10    :1   1st Qu.:0.2284      1st Qu.:0.14310     1st Qu.:0.23876     1st Qu.:0.3445  
S2     :1   Median :0.5109      Median :0.20889     Median :0.57103     Median :0.5634  
S3     :1   Mean   :0.4707      Mean   :0.41891     Mean   :0.50806     Mean   :0.5554  
S4     :1   3rd Qu.:0.6471      3rd Qu.:0.78261     3rd Qu.:0.70491     3rd Qu.:0.7484  
S5     :1   Max.   :0.9509      Max.   :0.97565     Max.   :0.95610     Max.   :0.9797  
(Other):4               
List Element 2              
SID X1  X2  X3  X4
S1     :1   Min.   :0.1557      Min.   :0.05512     Min.   :0.01937     Min.   :0.0212  
S10    :1   1st Qu.:0.2284      1st Qu.:0.14310     1st Qu.:0.23876     1st Qu.:0.3445  
S2     :1   Median :0.5109      Median :0.20889     Median :0.57103     Median :0.5634  
S3     :1   Mean   :0.4707      Mean   :0.41891     Mean   :0.50806     Mean   :0.5554  
S4     :1   3rd Qu.:0.6471      3rd Qu.:0.78261     3rd Qu.:0.70491     3rd Qu.:0.7484  
S5     :1   Max.   :0.9509      Max.   :0.97565     Max.   :0.95610     Max.   :0.9797  

Есть идеи? Ура, Дэви.

Ответы [ 4 ]

6 голосов
/ 28 марта 2012

Ваш предложенный вывод выглядит как стандартный печатный вывод, поэтому вы можете просто захотеть записать напечатанный вывод в файл.Один простой способ - использовать функцию sink, а затем lapply распечатать резюме.Или вы можете использовать capture.output и сохранить результаты самостоятельно (если вы хотите изменить или проверить что-либо перед сохранением).

Если это не достаточно, посмотрите на код для функции печати, которая генерирует выводи посмотреть, если вы можете изменить это, чтобы поместить информацию в файл.Похоже, что функция итога во фрейме данных возвращает таблицу символьных строк, поэтому print.table будет местом для начала.

4 голосов
/ 28 марта 2012

Пропустите среднюю функцию и просто выполните:

lapply(dflist, function(i){  capture.output( print(  summary(i) ) , 
                                    file="test.txt", append=TRUE)})

Если вы хотите, чтобы все данные были в одной строке, перед запуском установите параметры (ширина = 200)

1 голос
/ 28 марта 2012

Скорее всего, это повлияет на вывод в зависимости от размера вашего окна в данный момент, но должно работать:

lapply(sumlist, function(i){out <- capture.output(print(i));cat(out,sep="\n",file="all_data_summary.txt",append=TRUE)}) -> .ans
0 голосов
/ 29 марта 2012

Рассматривали ли вы преобразование выходных данных в yaml и сохранение их в текстовом файле?

  • Это удобочитаемо для человека, что принципиально и нужно (я полагаю).
  • Вы можете восстановить исходную структуру данных из текстового файла.

Я думаю, что пакет называется yaml .

Конечно, если вам нужен вывод вточный формат, который вы указали, я не могу согласиться с принятым ответом больше.

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