R 无填充打印命名向量

R 无填充打印命名向量,r,pretty-print,R,Pretty Print,我有一个命名的字符向量,如下所示: x <- c(a="1.000", b="10000.000", c="1.000") a b c 1.000 10000.000 1.000 给我: a b c 1.000 10000.000 1.000 可以看出,所有值都填充到最宽值的宽度。我想打印它,使它看起来像这样: x <- c(a="1.000", b="100

我有一个命名的字符向量,如下所示:

x <- c(a="1.000", b="10000.000", c="1.000")
    a          b      c  
1.000  10000.000  1.000
给我:

        a          b          c  
    1.000  10000.000      1.000
可以看出,所有值都填充到最宽值的宽度。我想打印它,使它看起来像这样:

x <- c(a="1.000", b="10000.000", c="1.000")
    a          b      c  
1.000  10000.000  1.000
名字也可能更长。例如:

x <- c(aaaaaa="1.000", b="10000.000", ccccccc="1.000")
我不知道如何用现有的函数来实现这一点。我写了一篇丑陋的文章:

fun <- function(x) {

   len.n <- nchar(names(x))
   len.x <- nchar(x)
   max.len <- pmax(len.n, len.x)
   for (i in 1:length(x)) {
      cat(rep(" ", (max.len - len.n)[i]), collapse="", sep="")
      if (i > 1)
         cat("  ")
      cat(names(x)[i])
   }
   cat("\n")
   for (i in 1:length(x)) {
      cat(rep(" ", (max.len - len.x)[i]), collapse="", sep="")
      if (i > 1)
         cat("  ")
      cat(x[i])
   }
   cat("\n")

}

x <- c(a="1.000", b="10000.000", c="1.000")
fun(x)
x <- c(aaaaaa="1.000", b="10000.000", ccccccc="1.000")
fun(x)

fun更新:修复了小错误

我的解决方案与你的没有太大区别,但避免了循环

NicePrint = function(x) {
  NameW = nchar(names(x))
  ValW  = nchar(x)
  Width = pmax(NameW, ValW)
  format = sapply(Width, function(x) paste("%", x, "s", sep=""))

  L1 = paste(sprintf(format, names(x)), collapse="  ")
  L2 = paste(sprintf(format, x), collapse="  ")
  cat(L1, "\n", L2, "\n", sep="")
}

x <- c(a="1.000", b="10000.000", c="1.000") 
NicePrint(x)
    a          b      c
1.000  10000.000  1.000

x <- c(aaaaaa="1.000", b="10000.000", ccccccc="1.000")
NicePrint(x)
aaaaaa          b  ccccccc
 1.000  10000.000    1.000
NicePrint=函数(x){
NameW=nchar(名称(x))
ValW=nchar(x)
宽度=pmax(名称w,值w)
格式=sapply(宽度,函数(x)粘贴(“%”,x,“s”,sep=”“)
L1=粘贴(sprintf(格式,名称(x)),折叠=)
L2=粘贴(sprintf(格式,x),折叠=“”)
类别(L1,“\n”,L2,“\n”,sep=”“)
}
x