我想使用write.table
,除了我希望“输出”是内存中的变量而不是磁盘上的文件。基本上我正在尝试获取data.frame
的字符串表示(列对齐,没有列标题)。
答案 0 :(得分:4)
使用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"
答案 1 :(得分:3)
您可以写入任何连接,而不是写入文件。
我可以这样做:
x = matrix(rnorm(100), ncol = 10)
write.table(file = pipe("pbcopy"), x)
将表写入剪贴板。
然后我可以用
重读它read.table(pipe("pbpaste"))
编辑:
您也可以将所有内容都舍入为固定位数,然后在(write.table调用)中使用sep =“”,如下所示:
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"
答案 2 :(得分:0)
我认为这很有效。任何批评?我现在还在加速。
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 , " | " ) )