我正在尝试使用sprintf()
为字符填充空格(但任何基本R选项都可以(。
它对字母"a"
起作用,但对"β"
不起作用:
sprintf('% 2s', 'a')
#> [1] " a"
sprintf('% 2s', 'β')
#> [1] "β"
sprintf('% 3s', 'β')
#> [1] " β"
我想这与需要两个字节(即两个sprintf的"字符"(来表示"β"
字符串有关。。。但是,我可以更改我的代码,使其工作,并以"β"
被理解为一个字符(即一个可见字符(的方式填充空格。
首先将字符串转换为原生字符串。这在Windows上对我有效,但在https://rdrr.io/snippets/它将其.Platform$os.type报告为unix。
s <- 'β'; n <- 3 # inputs
sprintf("%*s", n, enc2native(s)) # or hard code the 3 and drop n
## [1] " ß"
或者将paste0
或substring<-
与strrep
一起使用,或者将字符串转换为X,执行sprintf
,然后再转换回。这些在Windows和https://rdrr.io/snippets/。
# 2
paste0(strrep(' ', n - nchar(s)), s)
## [1] " β"
# 3
`substring<-`(strrep(" ", n), n - nchar(s) + 1, n, s)
## [1] " ß"
# 4
sub("X+", s, sprintf("%*s", n, strrep("X", nchar(s))))
## [1] " β"