Saya mencoba membuat output saya terlihat seperti ini, yang menunjukkan semuanya selaras ke kanan dan spasi secara merata: Keluaran yang diharapkan

Tetapi untuk beberapa alasan output saya sendiri akhirnya digeser ke kiri:

Board(playerA, header = TRUE)
   Name    0s   1s   2s   3s   5s   X    Out  Tot 
T Smith    1    1    1    2    2    0    0   19

Kode berikut adalah matriks dengan properti berikut:

initialise <- function(name) {
  matrix(
    rep(0, 8),
    nrow = 1, 
    ncol = 8,
    byrow = TRUE,
    dimnames = list(name,c("0s", "1s", "2s", "3s", "5s", "X", "Out", "Tot")
    )
  )   
}

Ini adalah kode yang saya lakukan untuk mencetak matriks dan mengecat kolom ke kata "Nama" serta memberi spasi dan membuatnya terlihat rata:

Board <- function(player, header = FALSE) {
  if (header) {
    cat("   Name   ")

    for (name in colnames(player)) {
      cat(" ")
      cat(format(name, width = 4))
    }
    cat("\n")

    cat(rownames(player))


    for (i in 1:length(player)) {
      cat(" ")
      cat(format(player[i], width = 4))
    }
  }
#test code
playerA <- initialise("T Smith")
Board(playerA, header = TRUE)

Jika ada yang bisa membantu saya akan sangat menghargainya!

r
1
sxhilllll 18 Mei 2021, 10:45

1 menjawab

Jawaban Terbaik

Anda harus memperluas / memangkas nama pemain dengan lebar cat(" Name ") di header.

Board <- function(player, header = FALSE) {
  if (header) {
    cat("   Name")
    
    for (name in colnames(player)) {
      cat(" ")
      cat(format(name, width = 4, justify = "right"))
    }
    cat("\n")
  }
  cat(strtrim(paste(rownames(player), "      "), 7))

  for (i in 1:length(player)) {
    cat(" ")
    cat(format(as.character(player[i]), width = 4, justify = "right"))
  }
}
Board(playerA, header = TRUE)
#   Name   0s   1s   2s   3s   5s    X  Out  Tot
#T Smith    0    0    0    0    0    0    0    0   0
0
GKi 18 Mei 2021, 08:30