连接不需要地应用最大字符宽度

时间:2011-09-27 07:57:39

标签: r printing string-concatenation

我正在尝试打印一些混合文本和变量,所有这些都在一行上。 c()不必要地强制所有字符字段为最大字段的宽度,即在这种情况下为12个字符。如何获得简单的连接?

> print(c('Splitting col',i,'x<', xsplitval),quote=FALSE)
[1] Splitting col 9             x<            6.7   

(我已经检查了所有SO问题,以及所有R文档,包括印刷品,选项,格式和R邮件列表,以及Google等)。

3 个答案:

答案 0 :(得分:4)

您可能想要使用paste

i <- 9
xsplitval <- 6.7

paste('Splitting col',i,'x<', xsplitval, sep="")
[1] "Splitting col9x<6.7"

答案 1 :(得分:1)

另一种选择是使用sprintf函数,它允许进行一些数字格式化:

i <- 9
xsplitval <- 6.7
sprintf("Splitting col %i, x<%3.1f", i, xsplitval)

答案 2 :(得分:1)

为此,我建议使用连接和打印功能cat。另一个选项是message,它将输出发送到stderr。

> i <- 9
> xsplitval <- 6.7
> cat('Splitting col ',i,' x<', xsplitval, '\n', sep="")
Splitting col 9 x<6.7
> message('Splitting col ',i,' x<', xsplitval, sep="")
Splitting col 9 x<6.7

c是将值组合到向量中的函数;它将结果排成等间距列,以便更容易地查看结果向量。

> c('Splitting col ',i,' x<', xsplitval)
[1] "Splitting col " "9"              " x<"            "6.7"  

paste将字符向量连接在一起,sprintf就像C函数一样,但两者都返回字符向量,默认输出带引号和数字给出索引,每行都有输出以...开头,因此您可能希望将它们包装在catmessage

> s1 <- paste('Splitting col ',i,' x<', xsplitval, sep=""); s1
[1] "Splitting col 9 x<6.7"
> cat(s1,'\n')
Splitting col 9 x<6.7 

> s2 <- sprintf("Splitting col %i, x<%3.1f", i, xsplitval); s2
[1] "Splitting col 9, x<6.7"
> cat(s2,'\n')
Splitting col 9, x<6.7