[R] Printing vector
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Mon Jul 22 21:26:01 CEST 2019
Hello,
How could I forgot na.print? Thanks, Bill.
This version c no longer has an argument fill and it's the one that
behaves more like the OP asks for so far.
print0c <- function(x, len = 10, digits = 2){
n <- length(x)
x <- round(x, digits = digits)
fill <- NA
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)))
}
print(A, na.print = "")
}
print0c(rnorm(23), 10)
print0c(2^(1:23), 10)
Hope this helps,
Rui Barradas
Às 19:40 de 22/07/19, William Dunlap escreveu:
> By the way, the default print method has the argument 'na.print' that
> can speciify how to print an NA value. E.g.,
>
> > print(c(1234/9999, NA, 1), na.print="n/a")
> [1] 0.1234123 n/a 1.0000000
> > print(c(1234/9999, NA, 1), na.print="")
> [1] 0.1234123 1.0000000
> > print(c(1234/9999, NA, 1))
> [1] 0.1234123 NA 1.0000000
>
>
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com <http://tibco.com>
>
>
> On Mon, Jul 22, 2019 at 11:07 AM Steven <syen using hqu.edu.cn
> <mailto:syen using hqu.edu.cn>> wrote:
>
> Thank you, Gentlemen. That serves my need. Bill's routine is great.
>
> Also, Rui: Is there a way to get rid of the filled "NA" and use
> space instead. Using fill = "" does not help either; it causes all
> numbers to be embraced with quotations. Finally, I have no idea why
> Rui's message did not reach me at all (not even in the junk mail
> box). But, obviously Bill had received it. Hmm.
>
> Steven Yen
>
> William Dunlap 於 2019/7/23 上午 12:33 寫道:
>> 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 <http://tibco.com>
>>
>>
>> On Mon, Jul 22, 2019 at 12:19 AM Rui Barradas
>> <ruipbarradas using sapo.pt <mailto: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 <mailto: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 <mailto: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 <mailto: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.
>>
More information about the R-help
mailing list