格式化打印语句

时间:2012-10-02 22:47:28

标签: r

我想格式化print语句的输出,以便print语句中的元素 由一个小的均匀间隙隔开,间隙为1,3或5个空隙。就是它 可能的?

在下面的例子中,我认为print语句中的所有元素都被认为是 只要是print语句中的第一个元素(这里只要aa1aa2)。

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语句。也许有一些变体:How to print R variables in middle of String

2 个答案:

答案 0 :(得分: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(),因为strwrap()会破坏输入中的空格。)

答案 1 :(得分: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"