以编程方式将字符串宽度值插入sprintf()

Ric*_*ven 4 string printf r

我试图以编程方式将字符串宽度值插入sprintf()格式.

期望的结果是

sprintf("%-20s", "hello")
# [1] "hello               "
Run Code Online (Sandbox Code Playgroud)

但我想20在同一个电话中即时插入,以便它可以是任何数字.我试过了

sprintf("%%-%ds", 20, "hello")
# [1] "%-20s"
sprintf("%-%ds", 20, "hello")
# Error in sprintf("%-%ds", 20, "hello") : 
#   invalid format '%-%d'; use format %f, %e, %g or %a for numeric objects
sprintf("%-%%ds", 20, "hello")
# Error in sprintf("%-%%ds", 20, "hello") : 
#   invalid format '%-%%d'; use format %f, %e, %g or %a for numeric objects
Run Code Online (Sandbox Code Playgroud)

这有可能sprintf()吗?

Bha*_*Rao 10

是的,这可以通过使用星号来实现*.

文档中所述,

字段宽度或精度(但不是两者)可以用星号*表示:在这种情况下,参数指定所需的数字

因此代码将是

> sprintf("%-*s", 20, "hello")
[1] "hello               "
Run Code Online (Sandbox Code Playgroud)