From wdunlap at tibco.com  Wed Jun  3 17:58:15 2009
From: wdunlap at tibco.com (William Dunlap)
Date: Wed, 3 Jun 2009 08:58:15 -0700
Subject: [Rd] Print bug for matrix(list(NA_complex_, ...))
In-Reply-To: <18982.17460.628994.128590@lynne.math.ethz.ch>
References: <8b356f880906022219n77891154k583fecf59e96ecaf@mail.gmail.com><4A2637AD.4050801@idi.ntnu.no>
	<18982.17460.628994.128590@lynne.math.ethz.ch>
Message-ID: <77EB52C6DD32BA4D87471DCD70C8D7000147B9EB@NA-PA-VBE03.na.tibco.com>

> -----Original Message-----
> From: r-devel-bounces at r-project.org 
> [mailto:r-devel-bounces at r-project.org] On Behalf Of Martin Maechler
> Sent: Wednesday, June 03, 2009 2:37 AM
> To: Wacek Kusnierczyk
> Cc: r-devel at r-project.org
> Subject: Re: [Rd] Print bug for matrix(list(NA_complex_, ...))
> 
> >>>>> "vQ" == Wacek Kusnierczyk 
> <Waclaw.Marcin.Kusnierczyk at idi.ntnu.no>
> >>>>>     on Wed, 03 Jun 2009 10:43:25 +0200 writes:
> 
>     vQ> Stavros Macrakis wrote:
>     >> In R 2.8.0 on Windows (tested both under ESS and under 
> R Console in case
>     >> there was an I/O issue)
>     >> 
>     >> There is a bug in printing val <- 
> matrix(list(NA_complex_,NA_complex_),1).
>     >> 
>     >> 
>     >>> dput(val)
>     >>> 
>     >> structure(list(NA_complex_, NA_complex_), .Dim = 1:2)
>     >> 
>     >> 
>     >>> print(val)
>     >>> 
>     >> 
>     >> [,1]
>     >> 
>     >> [1,]
>     >> 
>     >> 
>     >> [,2]
>     >> 
>     >> [1,]
>     >> 
>     >> 
>     >> Note that a large number of spaces are printed instead of NA.  
> 
>     vQ> on ubuntu 8.04 with r 2.10.0 r48703 there is almost 
> no problem (still
>     vQ> some unnecessary spaces):
> 
>     vQ> [,1]      [,2]    
>     vQ> [1,]        NA        NA
> 
> thank you, Waclav.
> 
> I don't see any unnecessary space (or other CPU problems),
> using another Linux variant (RHEL 5)
> in the three R version
>        	  2.9.0 ,  
> 	  2.9.0-patched (r48700)
> 	  2.10.0-devel  (r48700)
> 
> Can other Windows (or ...) users confirm problems in R 2.9.0 
> (or newer) ?

I just tried it on 2.9.0 on the Windows GUI (RGui.exe)
and saw similar problems.  When printing to the
command window, with either print(val) or show(val) it took
a very long time and put $'s at the ends of the lines
(indicating that there was text beyond the edge of the window).
I used sink() to put the output into a file and then print() and
show() acted quickly.  The resulting file had 119 character
lines, consisting mainly of trailing blanks:

> readLines("c:/temp/val.txt") # output of print(val);show(val);str(val)
 [1] "     [,1]
"
 [2] "[1,]
"
 [3] "     [,2]
"
 [4] "[1,]
"
 [5] "     [,1]
"
 [6] "[1,]
"
 [7] "     [,2]
"
 [8] "[1,]
"
 [9] "List of 2"

[10] " $ : cplx NA"

[11] " $ : cplx NA"

[12] " - attr(*, \"dim\")= int [1:2] 1 2"

> nchar(readLines("c:/temp/val.txt"))
 [1] 119 119 119 119 119 119 119 119   9  12  12  32

On Linux, using yesterday's 2.9.0, valgrind shows lots
of 'depends on uninitialized value' problems that could
explain the Linux-Windows difference in behavior:

> val<-matrix(list(NA_complex_,NA_complex_),1)
> val
==24859== Conditional jump or move depends on uninitialised value(s)
==24859==    at 0x6F7E2F: vfprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x7177A5: vsnprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6FF4E1: snprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x809DDC1: Rf_EncodeReal (printutils.c:179)
==24859==    by 0x8099AA9: Rf_PrintValueRec (print.c:359)
==24859==    by 0x809A124: Rf_PrintValueEnv (print.c:956)
==24859==    by 0x80584CA: Rf_ReplIteration (main.c:261)
==24859==    by 0x8058572: R_ReplConsole (main.c:306)
==24859==    by 0x8058BB8: run_Rmainloop (main.c:967)
==24859==    by 0x8056A70: main (Rmain.c:33)
==24859==
==24859== Conditional jump or move depends on uninitialised value(s)
==24859==    at 0x6F7E44: vfprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x7177A5: vsnprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6FF4E1: snprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x809DDC1: Rf_EncodeReal (printutils.c:179)
==24859==    by 0x8099AA9: Rf_PrintValueRec (print.c:359)
==24859==    by 0x809A124: Rf_PrintValueEnv (print.c:956)
==24859==    by 0x80584CA: Rf_ReplIteration (main.c:261)
==24859==    by 0x8058572: R_ReplConsole (main.c:306)
==24859==    by 0x8058BB8: run_Rmainloop (main.c:967)
==24859==    by 0x8056A70: main (Rmain.c:33)
==24859==
==24859== Conditional jump or move depends on uninitialised value(s)
==24859==    at 0x6F7E4C: vfprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x7177A5: vsnprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6FF4E1: snprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x809DDC1: Rf_EncodeReal (printutils.c:179)
==24859==    by 0x8099AA9: Rf_PrintValueRec (print.c:359)
==24859==    by 0x809A124: Rf_PrintValueEnv (print.c:956)
==24859==    by 0x80584CA: Rf_ReplIteration (main.c:261)
==24859==    by 0x8058572: R_ReplConsole (main.c:306)
==24859==    by 0x8058BB8: run_Rmainloop (main.c:967)
==24859==    by 0x8056A70: main (Rmain.c:33)
==24859==
==24859== Conditional jump or move depends on uninitialised value(s)
==24859==    at 0x6FA87A: vfprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x7177A5: vsnprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6FF4E1: snprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x809DDC1: Rf_EncodeReal (printutils.c:179)
==24859==    by 0x8099AA9: Rf_PrintValueRec (print.c:359)
==24859==    by 0x809A124: Rf_PrintValueEnv (print.c:956)
==24859==    by 0x80584CA: Rf_ReplIteration (main.c:261)
==24859==    by 0x8058572: R_ReplConsole (main.c:306)
==24859==    by 0x8058BB8: run_Rmainloop (main.c:967)
==24859==    by 0x8056A70: main (Rmain.c:33)
==24859==
==24859== Conditional jump or move depends on uninitialised value(s)
==24859==    at 0x6F86E8: vfprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x7177A5: vsnprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6FF4E1: snprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x809DDC1: Rf_EncodeReal (printutils.c:179)
==24859==    by 0x8099AA9: Rf_PrintValueRec (print.c:359)
==24859==    by 0x809A124: Rf_PrintValueEnv (print.c:956)
==24859==    by 0x80584CA: Rf_ReplIteration (main.c:261)
==24859==    by 0x8058572: R_ReplConsole (main.c:306)
==24859==    by 0x8058BB8: run_Rmainloop (main.c:967)
==24859==    by 0x8056A70: main (Rmain.c:33)
==24859==
==24859== Conditional jump or move depends on uninitialised value(s)
==24859==    at 0x6F86FA: vfprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x7177A5: vsnprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6FF4E1: snprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x809DDC1: Rf_EncodeReal (printutils.c:179)
==24859==    by 0x8099AA9: Rf_PrintValueRec (print.c:359)
==24859==    by 0x809A124: Rf_PrintValueEnv (print.c:956)
==24859==    by 0x80584CA: Rf_ReplIteration (main.c:261)
==24859==    by 0x8058572: R_ReplConsole (main.c:306)
==24859==    by 0x8058BB8: run_Rmainloop (main.c:967)
==24859==    by 0x8056A70: main (Rmain.c:33)
==24859==
==24859== Conditional jump or move depends on uninitialised value(s)
==24859==    at 0x711183: _IO_padn (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6F8713: vfprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x7177A5: vsnprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6FF4E1: snprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x809DDC1: Rf_EncodeReal (printutils.c:179)
==24859==    by 0x8099AA9: Rf_PrintValueRec (print.c:359)
==24859==    by 0x809A124: Rf_PrintValueEnv (print.c:956)
==24859==    by 0x80584CA: Rf_ReplIteration (main.c:261)
==24859==    by 0x8058572: R_ReplConsole (main.c:306)
==24859==    by 0x8058BB8: run_Rmainloop (main.c:967)
==24859==    by 0x8056A70: main (Rmain.c:33)
==24859==
==24859== Conditional jump or move depends on uninitialised value(s)
==24859==    at 0x7111BF: _IO_padn (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6F8713: vfprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x7177A5: vsnprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x6FF4E1: snprintf (in /lib/tls/libc-2.3.4.so)
==24859==    by 0x809DDC1: Rf_EncodeReal (printutils.c:179)
==24859==    by 0x8099AA9: Rf_PrintValueRec (print.c:359)
==24859==    by 0x809A124: Rf_PrintValueEnv (print.c:956)
==24859==    by 0x80584CA: Rf_ReplIteration (main.c:261)
==24859==    by 0x8058572: R_ReplConsole (main.c:306)
==24859==    by 0x8058BB8: run_Rmainloop (main.c:967)
==24859==    by 0x8056A70: main (Rmain.c:33)
Bill Dunlap
TIBCO Software Inc - Spotfire Division
wdunlap tibco.com 

> 
> Regards,
> Martin Maechler
> 
>     >> Compare the
>     >> unproblematic real case:
>     >> 
>     >> print(structure(list(NA_real_, NA_real_), .Dim = 1:2))
>     >> [,1] [,2]
>     >> [1,] NA   NA
>     >> 
>     >> Also, when printed in the read-eval-print loop, 
> printing takes a very very
>     >> long time:
>     >> 
>     >> 
>     >>> proc.time(); matrix(list(NA_complex_,NA_complex_),1); 
> proc.time()
>     >>> 
>     >> user  system elapsed
>     >> 74.35    0.09  329.45
>     >> 
>     >> [,1]
>     >> 
>     >> [1,]
>     >> 
>     >> 
>     >> [,2]
>     >> 
>     >> [1,]
>     >> 
>     >> user  system elapsed
>     >> 92.63    0.15  347.86
>     >> 
>     >> 18 seconds runtime!
>     >> 
> 
>     vQ> user  system elapsed
>     vQ> 0.648   0.056 155.843
>     vQ> [,1] [,2]
>     vQ> [1,]  NA   NA
>     vQ> user  system elapsed
>     vQ> 0.648   0.056 155.843
> 
>     vQ> vQ
> 
>     vQ> ______________________________________________
>     vQ> R-devel at r-project.org mailing list
>     vQ> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 



[Rd] Print bug for matrix(list(NA_complex_, ...))
William Dunlap