我使用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;)。
答案 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