代码之家  ›  专栏  ›  技术社区  ›  Spacedman

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

  •  4
  • Spacedman  · 技术社区  · 6 年前

    我有一个函数,它返回给定两个日期的句点的字符串表示形式,但我希望用户能够控制格式。为了这个我在用 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"
    

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

    我试过一些技巧,比如用 %0s 但没有欢乐:

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

    显然,我可以让调用者说出格式是否使用开始日期和/或结束日期,但如果有方法使用 把格式数据写成串 格式化字符串会很整洁。

    1 回复  |  直到 6 年前
        1
  •  6
  •   Kazuhito    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"