3

我想格式化打印语句的输出,以便打印语句中的元素由一个小的统一间隙分隔,间隙为 1、3 或 5 个空格。那可能吗?

在下面的示例中,我认为 print 语句中的所有元素都被假定为与 print 语句中的第一个元素一样长(这里是 long asaa1aa2)。

print.gap语句不会产生所需的格式。它只是在每个元素之间添加了一个额外的恒定数量的空格。

aa1 <- 'abcdefghijklmnopqrstuvwxyz'
aa2 <- 'abc'

bb  <- 10
cc  <- 222

print(c(aa1,bb,cc))

# [1] "abcdefghijklmnopqrstuvwxyz" "10"                         "222" 

print(c(aa2,bb,cc))

# [1] "abc" "10"  "222"

# desired output:

# [1] "abcdefghijklmnopqrstuvwxyz"   "10"   "222" 
#
# or
#
# [1] "abcdefghijklmnopqrstuvwxyz"   10   222 

谢谢你的任何建议。也许我必须使用cat语句而sprintf不是print语句。也许这有一些变化:如何在字符串中间打印 R 变量

4

2 回答 2

4

这将使您成功:

x <- c(aa1,bb,cc)

options(useFancyQuotes = FALSE)
cat(paste(dQuote(x), collapse="   "), "\n")
# "abcdefghijklmnopqrstuvwxyz"   "10"   "222" 

我说“中途”是因为上面的代码不考虑换行:如果你给它一个很长的字符串向量,它们都会被集中到一个很长的非换行行...


编辑显示一种换行的方法:

您可以通过使用strwrap()(感谢@mnel)和gsub(), 的组合来获得换行:

xs <- c(x,x,x,x)

cat(gsub("\" \"", "\"   \"", 
    strwrap(paste(dQuote(xs), collapse=" "), 70)), sep="\n")
# "abcdefghijklmnopqrstuvwxyz"   "10"   "222"   "abcdefghijklmnopqrstuvwxyz"
# "10"   "222"   "abcdefghijklmnopqrstuvwxyz"   "10"   "222"
# "abcdefghijklmnopqrstuvwxyz"   "10"   "222"

gsub()(如果向量元素之间需要多个空格,则需要调用 to ,因为strwrap()会破坏输入中的空格。)

于 2012-10-02T23:03:52.047 回答
2

我会发表我的评论作为答案

您可以创建自己的print.character方法并用于strwrap包装到合理的行长。

不幸的是strwrap,它破坏了所有空格并用一个空格替换它

print.character <- function(x, width = getOption('width'), .sep = '  '){
  cat(paste(strwrap(paste(dQuote(x), collapse = .sep, sep =.sep), width),  
  collapse = '\n'), '\n')
}
x <- c(aa1,bb,cc)
print(x)
## "abcdefghijklmnopqrstuvwxyz" "10" "222"
print(rep(x,10))
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222"
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222"
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222"
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222"
## "abcdefghijklmnopqrstuvwxyz" "10" "222" "abcdefghijklmnopqrstuvwxyz" "10" "222" 

对于字符变量中的空格,它将无法按预期工作

print('Does not work  with strings with  variable spaces that you \n might \t \t \t want to keep')
"Does not quite work with strings with variable spaces that you might want to keep" 
于 2012-10-03T00:17:07.447 回答