在R中跳过sprintf格式字符串中的参数

时间:2018-06-04 14:37:37

标签: r printf

我有一个函数返回给定两个日期的句点的字符串表示,但我希望用户能够控制格式。为此,我使用sprintf并且调用者传入格式字符串,使调用者可以灵活地使用以下内容:

> sprintf("from %s - %s","Mon 21","Sun 27")
[1] "from Mon 21 - Sun 27"

> sprintf("%s - %s inclusive","Mon 21","Sun 27")
[1] "Mon 21 - Sun 27 inclusive"

我发现如果你在格式字符串中没有足够的%标记就无所谓了,所以你可以这样做:

> sprintf("week begin %s","Mon 21","Sun 27")
[1] "week begin Mon 21"

但我找不到一种方法来构造一个格式字符串,该字符串删除第一个参数并返回“周末结束Sun 27”。注意我真的想要一个只改变格式字符串的解决方案,或者知道这是不可能的......

我尝试过使用%0s创建第一个格式为0宽度的技巧,但没有快乐:

> sprintf("%0s week ending %s","Mon 21","Sun 27")
[1] "Mon 21 week ending Sun 27"

显然,我可以通过让调用者说明格式是否使用开始日期和/或结束日期,但是如果有一种方法可以使用sprintf格式字符串来完成这项工作。

1 个答案:

答案 0 :(得分:6)

喜欢这个吗?

> sprintf("week ending %2$s","Mon 21","Sun 27")
[1] "week ending Sun 27"

另一个例子(扩展主题),

> sprintf("week ending either %2$s or %4$s", "Mon 21","Sun 27","Mon 28","Sun 2")
[1] "week ending either Sun 27 or Sun 2"