[R] Printing vector

Steven @yen @end|ng |rom hqu@edu@cn
Wed Jul 24 00:32:31 CEST 2019


Very nice indeed. Thank you gentlemen.

Steven

Michael Friendly 於 2019/7/24 上午 01:23 寫道:
> Nice to see William Dunlap take the trouble to mimic the classic 
> Fortran behavior of printing **** for numbers that don't fit in the 
> given width :)
>
> -Michael
>
> On 7/22/19 6:33 p.m., William Dunlap via R-help wrote:
>> The following mimics Fortran printing with format
>> <perLine>F<fWidth>.<fPrecision>.
>>
>> print1 <- function (x, perLine = 10, fWidth = 8, fPrecision = 2,
>> fortranStars = TRUE)
>> {
>>      format <- paste0("%", fWidth, ".", fPrecision, "f")
>>      oldWidth <- getOption("width")
>>      on.exit(options(width = oldWidth))
>>      options(width = perLine * fWidth)
>>      fx <- sprintf(format, x)
>>      if (fortranStars) {
>>          fx[nchar(fx) > fWidth] <- strrep("*", fWidth)
>>      }
>>      cat(fx, sep = "", fill = TRUE)
>>      invisible(x)
>> }
>>
>> Compare
>>> print1((-1.7)^(1:24))
>>     -1.70    2.89   -4.91    8.35  -14.20   24.14  -41.03 69.76 -118.59
>>   201.60
>>   -342.72  582.62 -990.46 1683.78-2862.42
>> 4866.12-8272.4014063.08********40642.31
>> ********************************
>> with the output from the Fortran
>> % cat a.f
>>        double precision x(24);
>>        integer i
>>        do 10 i=1,24
>>          x(i) = (-1.7d0) ** i
>>   10   continue
>>        write(6, "(10f8.2)") x
>>        stop
>>        end
>> % gfortran a.f
>> % ./a.out
>>     -1.70    2.89   -4.91    8.35  -14.20   24.14  -41.03 69.76 -118.59
>>   201.60
>>   -342.72  582.62 -990.46 1683.78-2862.42
>> 4866.12-8272.4014063.08********40642.31
>> ********************************
>>
>>
>> Compare
>> Bill Dunlap
>> TIBCO Software
>> wdunlap tibco.com
>>
>>
>> On Mon, Jul 22, 2019 at 12:19 AM Rui Barradas <ruipbarradas using sapo.pt> 
>> wrote:
>>
>>> Simpler, no loops:
>>>
>>>
>>> print0b <- function(x, len = 10, digits = 2, fill = ""){
>>>     n <- length(x)
>>>     x <- round(x, digits = digits)
>>>     m <- n %/% len
>>>     remainder <- n %% len
>>>     A <- matrix(x[seq_len(len*m)], ncol = len)
>>>     if(remainder > 0){
>>>       A <- rbind(A, c(x[(len*m + 1):n], rep(fill, len*(m + 1) - n)))
>>>     }
>>>     A
>>> }
>>>
>>>
>>> Hope this helps,
>>>
>>> Rui Barradas
>>>
>>> Às 07:47 de 22/07/19, Rui Barradas escreveu:
>>>> Hello,
>>>>
>>>> Maybe something like the following is what you want.
>>>> I have added an extra argument 'fill' to allow to choose what to print
>>>> in the end. It's default value is "" making the entire matrix elements
>>>> characters but it can be NA or 0.
>>>>
>>>> print0 <- function(x, len = 10, digits = 2, fill = ""){
>>>>     n <- length(x)
>>>>     x <- round(x, digits = digits)
>>>>     passes <- n %/% len
>>>>     remainder <- n %% len
>>>>     A <- matrix(fill, nrow = passes + (remainder > 0), ncol = len)
>>>>     for(i in seq_len(passes)){
>>>>       A[i, ] <- x[(len*(i - 1) + 1):(len*i)]
>>>>     }
>>>>     A[nrow(A), 1:remainder] <- x[(len*passes + 1):n]
>>>>     A
>>>> }
>>>>
>>>> print0(rnorm(23), 10)
>>>> print0(rnorm(23), 10, fill = 0)
>>>>
>>>>
>>>> Hope this helps,
>>>>
>>>> Rui Barradas
>>>>
>>>> Às 21:34 de 20/07/19, Steven escreveu:
>>>>> Dear All:
>>>>>
>>>>> Below is what I meant. Procedure print0 allows me to print a 
>>>>> vector of
>>>>> length 53 in four rows of 10 plus 1 row of 3 (Ido not like the 
>>>>> NA). This
>>>>> is silly. I am hoping that there is a candid way to print the matrix.
>>>>> Thank you.
>>>>>
>>>>> Steven Yen
>>>>>
>>>>> ===
>>>>> n<-53; x<-runif(n); # x<-round(x,2)
>>>>>
>>>>> print0<-function(x,c=10,digits=2){
>>>>> # ******************************************
>>>>> # Print vector in rows of a specified length
>>>>> # ******************************************
>>>>>      n<-length(x)
>>>>>      r<-n/c; if(n%%c>0) r<-as.integer(r)+1
>>>>>      y<-rep(NA,r*c)
>>>>>      y[1:n]<-x
>>>>>      y<-matrix(y,r,c,byrow=T)
>>>>>      y<-round(y,digits=digits)
>>>>>      y
>>>>> }
>>>>>
>>>>> print0(x,c=10,digits=3)
>>>>>
>>>>> # result
>>>>> # [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10]
>>>>> # [1,] 0.576 0.291 0.600 0.515 0.135 0.335 0.296 0.911 0.454 0.696
>>>>> # [2,] 0.699 0.728 0.442 0.469 0.996 0.539 0.772 0.768 0.652 0.882
>>>>> # [3,] 0.614 0.228 0.748 0.071 0.788 0.428 0.885 0.722 0.432 0.881
>>>>> # [4,] 0.422 0.148 0.459 0.870 0.044 0.421 0.282 0.337 0.751 0.579
>>>>> # [5,] 0.468 0.659 0.446 0.199 0.388 0.576 0.829 0.186 0.823 0.960
>>>>> # [6,] 0.880 0.944 0.709    NA    NA    NA    NA    NA NA    NA
>>>>>
>>>>> Steven 於 2019/7/20 下午 02:00 寫道:
>>>>>>
>>>>>> Is there a convenient way to print a vector into rows of a specified
>>>>>> column length? What I need is to print in the old FORTRAN format, 
>>>>>> viz.,
>>>>>>
>>>>>> format(10F8.2)
>>>>>>
>>>>>> which would print, for instance, a vector of 25 into two rows of 10
>>>>>> plus an incomplete row of 5. I managed to write a procedure for that
>>>>>> task, as shown below (except that I prefer simply blanks rather than
>>>>>> the NA). I am too embarrassed to even show the procedure. In 
>>>>>> short, I
>>>>>> like to print in the above FORTRAN format. Thank you.
>>>>>>
>>>>>> ----
>>>>>>
>>>>>> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 0.66 0.26 
>>>>>> 0.82
>>>>>> 0.73 0.13 0.05 0.56 0.67 0.74 0.87 [2,] 0.91 0.25 0.40 0.39 0.50 
>>>>>> 0.89
>>>>>> 0.07 0.84 0.14 0.75 [3,] 0.38 0.08 0.86 0.97 0.56 NA NA NA NA NA
>>>>>
>>>>>      [[alternative HTML version deleted]]
>>>>>
>>>>> ______________________________________________
>>>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>>> PLEASE do read the posting guide
>>>>> http://www.R-project.org/posting-guide.html
>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>
>>>>
>>>> ______________________________________________
>>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide
>>>> http://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>> ______________________________________________
>>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>>     [[alternative HTML version deleted]]
>>
>



More information about the R-help mailing list