我有字符向量,我想确保向量的所有元素具有相同的长度。因此,我用空格填充短元素,如下所示:
vec <- c("fjdlksa01dada","rau","sjklf")
x <- sprintf("%-15s", vec)
nchar(x)
# returns
[1] 15 15 15
喜欢我建议的previous question的答案。这很好,但它似乎与变音符号有问题。例如,如果我的矢量看起来像这样:
vec2 <- c("fjdlksa01dada","rauü","sjklf")
y <- sprintf("%-15s", vec)
nchar(y)
# returns
[1] 15 14 15
我在Mac OS X上运行R(10.6)。我该如何解决这个问题?
编辑: 注意,我不打算修复nchar的输出,因为它是正确的。问题是sprintf失去了变形金刚。
编辑:更新R,更改为DWins语言环境 - 完全没有变化。但是:
vec2 <- c("fjdlksa01dada","rauü","sjklf")
Encoding(vec2)
# returns
[1] "unknown" "UTF-8" "unknown"
奇怪。
答案 0 :(得分:1)
可能有一种更清洁的方式......但这有效:
sapply(vec, function(x){
paste(x, paste(rep(" ", 13-nchar(x)), collapse=""), "")
})
(请参阅下面的注释,了解13的[non] - 表达式)
答案 1 :(得分:1)
我在?sprintf
页面上找到了这个:
如果fmt的任何元素或任何字符参数声明为UTF-8,则结果的元素将为UTF-8并且编码声明为UTF-8。否则它将是当前语言环境的编码。
输入从Rgui的语言环境中获取其语言环境(我认为);见下文。
在Windows上,幸运的是已打印出来:
> vec2 <- c("fjdlksa01dada","rauü","sjklf")
> y <- sprintf("%-15s", vec)
> nchar(y)
[1] 15 15 15
我想想在MacO上你可以通过打开R来实现这一点,如下所示,但我没有任何Mac来实际测试这个:
Rgui --encoding=utf-8