R - write.table с выходом переменной / в памяти? - PullRequest
3 голосов
/ 12 мая 2011

Я хотел бы использовать write.table, за исключением того, что я хочу, чтобы «выходные данные» были переменной в памяти, а не файлом на диске. В основном я пытаюсь получить строковое представление data.frame (с выровненным столбцом, без заголовков столбцов).

Ответы [ 3 ]

4 голосов
/ 13 мая 2011

Используйте capture.output, чтобы получить вывод print:

df.mem=capture.output(print(df, row.names=FALSE))
df.mem

[1] "   A   B   C" " 500   1  92" "  12  13 754" "   8 938   3"
3 голосов
/ 12 мая 2011

Вместо записи в файл вы можете записать в любое соединение.

Я могу сделать это:

x = matrix(rnorm(100), ncol = 10)

write.table(file = pipe("pbcopy"), x)

, который записывает таблицу в буфер обмена.

Я могу затем прочитать его обратно с помощью

read.table(pipe("pbpaste"))

РЕДАКТИРОВАТЬ:

Вы также можете округлить все до фиксированного числа цифр, а затем использовать sep = "" в (write.tableвызов), как это:

x = matrix(rnorm(100), ncol = 10)

write.table(file = pipe("pbcopy"), round(x, 2), sep = "    ")

readLines(pipe("pbpaste"))

приводит к

 [1] "      V1    V2    V3    V4    V5    V6    V7    V8    V9   V10"
 [2] "1  -0.73  0.10 -0.47  1.02 -0.13 -0.01 -1.00 -0.19 -1.10  0.29"
 [3] "2  -0.53 -0.29  0.60  1.41  2.09 -0.49 -2.48  0.17  0.88  1.53"
 [4] "3   1.16  0.28  0.40  0.36  0.16  0.03 -0.72  0.20  1.71 -1.10"
 [5] "4   0.63 -0.85 -0.23 -0.95  0.09  0.96  0.31 -0.05  1.07 -0.09"
 [6] "5  -1.15 -0.27  0.80  0.62 -0.77 -0.54  0.18 -0.16  0.27 -0.17"
 [7] "6   1.03 -2.19  1.54 -1.36  1.00  0.35 -0.84 -0.54 -0.33 -0.92"
 [8] "7   0.12  0.49 -2.03 -0.07  0.55  0.48  0.32  0.22 -0.44 -0.56"
 [9] "8  -0.13 -0.07 -0.28 -0.49  1.56 -2.00 -0.44 -0.04 -0.26  0.77"
[10] "9  -1.23 -0.53  0.57  0.08 -0.59  0.65 -0.15  0.44 -0.67  0.00"
[11] "10 -0.60  1.07 -1.82  0.39  1.11 -1.86  0.25  0.44  0.57  0.53"
0 голосов
/ 12 мая 2011

Я думаю, что это работает. есть критика? Я все еще нарастаю на R.

PrettyPrintDataFrame = function( toPrint , separator = "" , align = "left" )
{        
    leftAlign = FALSE
    if ( align == "left" ) 
    {
        leftAlign = TRUE        
    }
    else if ( align == "right" )  {  }
    else
    {
        stop( "align must be 'left' or 'right'" )
    }

    result = ""
    numberOfColumns = ncol( toPrint )
    columnLenghts = array( dim = numberOfColumns )         
    for ( i in seq( 1:numberOfColumns ) )
    {
        columnLenghts[ i ] = max( nchar( toPrint[ , i ] ) )
    }

    numberOfRows = nrow( toPrint )    
    for ( row in seq( 1:numberOfRows ) )
    {   
        if ( row > 1 )
        {
            result = paste( result , "\n" , sep = "" )
        }

        for ( col in seq( 1:numberOfColumns ) )
        {
            value = toPrint[ row , col ]
            valuePadding = paste( rep( " " , columnLenghts[ col ]- nchar( value ) ) , collapse = "" , sep = "" )

            if ( leftAlign )
            {
                valuePadded = paste( value , valuePadding , sep = "" )
            }
            else
            {
                valuePadded = paste( valuePadding , value , sep = "" )
            }

            if ( col == 1 )
            {
                result = paste( result , valuePadded , sep = "" )
            }
            else            
            {
                result = paste( result , valuePadded , sep = separator )
            }

        }        
    }

    return( result )

}

тест

df = data.frame( A = c( 500 , 12 , 8 ) , B = c( 1 , 13 , 938 ) , C = c( 92, 754 , 3 ) )
writeLines( PrettyPrintDataFrame( df , " | " ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...