【问题标题】:Getting invalid format response in R when using sprintf - invalid format '% he'使用 sprintf 时在 R 中获取无效格式响应 - 无效格式“% he”
【发布时间】:2015-11-05 00:02:20
【问题描述】:

我正在尝试动态构建一个 html 文件,其中一个变量将取决于目录中与模式匹配的文件数。代码如下:

html <- '
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset = "utf-8">
    <title>Sankey Plot Test</title>
    <script type = "text/javascript" src = "http://code.jquery.com/jquery-latest.min.js"></script>
  </head>

  <body>
    <iframe src = "plot0.html" width = 100% height = 1000px id = "sankey" style = "border: none"></iframe>
    <script>
      $(function() {
        var selector = $("#sankey");
        var delay_sec = 1;
        var num = 1, 
            len = %d;
        setInterval(function() {
          num = (num === len) ? 0 : num;
          selector.attr("src", "plot" + num + ".html");
          num++;
        }, delay_sec * 1000);
      });
    </script>
  </body>
</html>'
n <- list.files(path = "path/to/files", pattern = "plot\\d+.html") %>% length()
html <- sprintf(html, n)

它返回一个错误,指出我的整数对象的格式不正确,尽管使用了%d。我在 SO 上看到了其他几个问题,这些问题提到了在使用 %dsprintf 时出现格式错误,但没有一个像我所看到的那样。

任何有关正在发生的事情的见解将不胜感激。谢谢!

【问题讨论】:

  • 这是因为它作为width = 100% height = 1000px 的一部分访问了% he - 这可以通过一些非常基本的调试代表您识别出来。开始逐行删除您的 html 文本,直到您发现何时引入了错误。
  • 你们两个是天才。谢谢!我可以改用stringr::str_interp
  • 顺便说一下,XML包有改变html节点和属性的功能。我认为这将是更安全的路线,而不是进行字符串解析。
  • @RichardScriven 我没有对 HTML 文件进行字符串解析。我正在生成自己的 html,其中包含一个 iframe,该 iframe 将循环通过 rCharts 小部件。如果您愿意,可以使用 HTML 文件的临时 gif。我只需要将长度变量设置为等于生成的文件数,我不知道如何在 javascript 中做到这一点。

标签: r


【解决方案1】:

你的问题出在这一行:

<iframe src = "plot0.html" width = 100% height 

注意 %。您可以像这样用另一个 % 转义 %:

<iframe src = "plot0.html" width = 100%% height

当 sprintf 遍历字符串时,它会正确输出 100%。

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2017-05-14
    • 1970-01-01
    • 2015-09-09
    • 2014-08-15
    相关资源
    最近更新 更多