在单个控制台行中写入可变长度字符串

时间:2018-01-25 04:15:49

标签: r

我使用RStudio。在循环中,我想在一个控制台行中显示一个可变长度的字符串。我正在使用cat()。如果我使用\n,则会写入不同的行(不是我想要的):

A <- c("AAAAA","BBB","C")
for (i in 1:3){cat(A[i],"\n"); Sys.sleep(1)}
AAAAA 
BBB 
C 

当名称具有(几乎)相同长度时,\r的使用效果很好,但在这种情况下,结果再次不是我想要的结果:

for (i in 1:3){cat(A[i],"\r"); Sys.sleep(1)}
C B A 

因为它应该只是字符串&#34; C&#34;当循环结束时。

我还尝试用\b删除许多空格,但长度差异很大,很多时候信息写在当前控制台行之上一行。

有一种简单的方法吗? (基础R首选)

编辑:我想要的是,在一行中,首先是字符串&#34; AAAAA&#34;出现。一秒钟后,只有字符串&#34; BBB&#34;应该出现(不是&#34; BBB A&#34;)。一秒钟后,只有字符串&#34; C&#34;应该出现(不是&#34; C B A&#34;)。

3 个答案:

答案 0 :(得分:1)

如果您首先将所有字符串填充到最长字符串的长度,则当前方法有效:

A <- c("AAAAA","BBB","C")
max_length = max(nchar(A))
A_filled = stringr::str_pad(A, max_length, side = "right")
for (i in 1:3){cat(A_filled[i],"\r"); Sys.sleep(1)}

要填充基础R中的字符串,您可以使用sprintf

max_length = max(nchar(A))
pad_format = paste0("%-", max_length, "s")
A_filled = sprintf(pad_format, A)

答案 1 :(得分:1)

我倾向于相信你想要打印所有的字符串:这是一个基本的R解决方案

 A <- c("AAAAA","BBB","C")
 x <-formatC(A, width = -max(nchar(A)))
 for (i in 1:3){cat("\r",x[i]); Sys.sleep(1)}

答案 2 :(得分:0)

我希望,只需一个简单的cat即可。

> for (i in 1:3){cat(A[i], " "); Sys.sleep(1)}
AAAAA  BBB  C  

> for (i in 1:3){cat(A[i]); Sys.sleep(1)}
AAAAABBBC