【问题标题】:Explanation for sprintf("%03d", 7) functionality?sprintf("%03d", 7) 功能的解释?
【发布时间】:2014-07-06 07:16:21
【问题描述】:

我正在尝试在 R 中编写函数,目的是读取多个 .csv 文件。它们被命名为 001.csv、002.csv、... 332.csv。

使用paste,我设法构造了名称 1.csv、2.csv 等,但在添加前导零时遇到了困难。暗示需要像 sprintf("%03d", 7) 这样的构造,但我不知道为什么以及如何工作。

那么有人可以解释以下语句实际上可以做什么吗?

【问题讨论】:

  • 您是否阅读了?sprintf 帮助页面?您是否有不清楚的具体部分?

标签: r csv printf paste


【解决方案1】:

sprintf 最初来自 C,所有格式规则也都取自它。请参阅 R 中的 ?sprintfthisthis 参考以详细了解该主题。在这里,我将简要概述其背后的魔力。

"%03d" 是一个格式化字符串,它指定如何打印7

  • d 代表 decimal integer(不是 double!),所以它表示不会有浮点或类似的东西,只有一个常规整数。
  • 3 显示打印的数字有多少位。更准确地说,该数字将占用至少 3 位数字:7 将是 __7(使用空格而不是下划线),但 1000 仍将是 1000,因为没有办法用 3 位数字写下这个数字。
  • 0 之前的 3 表明前导空格应替换为零。尝试使用sprintf("%+3d", 7)sprintf("%-3d", 7) 来查看其他可能的修饰符(它们被称为flags)。

话虽如此,sprintf("%03d", 7) 的输出将是 007

【讨论】:

  • @Aron 谢谢——总是很高兴!
  • 这真的帮了我除R之外的其他事情。很高兴您解释了 03d 的作用,而不仅仅是 03d 的作用。
【解决方案2】:

03d 将打印最少 3 位输出...如果输出小于 3 位,它将在开头添加零。如果输出超过单个 3 位,它将简单地打印输出。 如果输出(%d)= 2, %3d 将打印为 = 002

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2011-07-15
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    相关资源
    最近更新 更多