如何使用print()函数调整向量元素间距并修正输出格式?
如何在R中输出指定格式的集合样式
我需要将整数向量x = 1:10输出为x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}的格式,尝试了两种方法都没达到预期:
尝试过的方法及问题
方法一:
x = 1:10 print(c("x = {", x, "}"), quote=FALSE) #[1] x = { 1 2 3 4 5 6 7 8 9 10 }
方法二:
x = 1:10 noquote(paste(c("x = {",x,"}"),sep=",")) #[1] x = { 1 2 3 4 5 6 7 8 9 10 }
这两种方法的问题都是:元素之间空格过多,且没有逗号分隔。
解决办法
关键是要区分paste函数的sep和collapse参数:sep用于拼接不同向量的对应元素,而collapse才是用来把单个向量的所有元素连接成一个字符串。用下面的代码可以得到想要的格式:
方法一:用paste0 + paste(collapse)
x = 1:10 # 先把向量元素用", "连接成字符串,再拼接前后的符号 output_str <- paste0("x = {", paste(x, collapse = ", "), "}") # 用cat直接输出,避免print添加额外空格和索引 cat(output_str, "\n")
输出结果:
x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
方法二:用sprintf格式化
x = 1:10 output_str <- sprintf("x = {%s}", paste(x, collapse = ", ")) cat(output_str, "\n")
输出和上面完全一致。
为什么之前的方法不行?
- 方法一用
print(c("x = {", x, "}"), quote=FALSE):把字符串和向量元素放在一个新向量里,print输出向量时会自动给元素之间加大量空格对齐,所以出现多余空格。 - 方法二用
paste(c("x = {",x,"}"),sep=","):这里sep=","是给每个拼接的元素加逗号,但c("x = {",x,"}")是一个长度为12的向量,paste默认会把每个元素当成单独的项,而sep是在不同向量间拼接时生效,单个向量用sep不会起到连接元素的作用,所以还是没逗号,且print输出依然有多余空格。
内容的提问来源于stack exchange,提问作者northcrpkm
相关产品推荐
相关产品推荐

