如何将向量的打印列与sprintf(R)对齐

Ern*_*nie 1 c formatting r

假设我在R中有3个向量:

x <- c("xskdlfl", "  y", "lkjsf")
y <- c(22.5, 6, 7.0)
z <- c("slk","llkjdf", "xx")
Run Code Online (Sandbox Code Playgroud)

我想产生一个格式化的表格输出,最右边的字符对齐,除第一列外的所有列都这样对齐:

xskdlfl        y     lkjsf
22.5         5.6       7.0
slk       llkjdf        xx
Run Code Online (Sandbox Code Playgroud)

在R中没有太多凌乱的编程的情况下,我无法弄清楚如何使用sprintf做到这一点。在R中使用sprintf可以做到这一点的简单方法吗?使用“格式?” 我希望链接到一个好的sprintf教程。提前致谢。

raw*_*awr 5

x <- c("xskdlfl", "  y", "lkjsf")
y <- c(22.5, 6, 7.0)
z <- c("slk","llkjdf", "xx")

(dat <- setNames(data.frame(rbind(x, y, z)), c('x','y','z')))

#         x      y     z
# x xskdlfl      y lkjsf
# y    22.5      6     7
# z     slk llkjdf    xx

with(dat, data.frame(x = sprintf(paste0('%-', max(nchar(x)), 's'), x), y, z))

#         x      y     z
# 1 xskdlfl      y lkjsf
# 2 22.5         6     7
# 3 slk     llkjdf    xx
Run Code Online (Sandbox Code Playgroud)

您可以像这样在字符串的左侧或右侧添加填充:

sprintf('%7s', z)
# [1] "    slk" " llkjdf" "     xx"

sprintf('%-7s', z)
# [1] "slk    " "llkjdf " "xx     "
Run Code Online (Sandbox Code Playgroud)

只是根据nchar字符串的字符数确定多少(在这种情况下为7)