首页 > 解决方案 > For循环仅返回R中的最后一个值

问题描述

我在 R 中构造了一个 for 循环。但它只返回最后一个值。例如

asd <- c(0)
for (i in c(1,5)) {
  asd <- HTML("<tr>
          <td> '+d[",i,"]+' </td>
          <td>' + d[",i+1,"] + '</td>
          <td>' + d[",i+2,"] + '</td>
          <td>' + d[",i+3,"] + '</td>
          </tr>")
}

输出

asd
<tr><td> '+d[ 5 ]+' </td><td>' + d[ 6 ] + '</td><td>' + d[ 7 ] + '</td><td>' + d[ 8 ] + '</td></tr>

预期产出

'<tr><td> '+d[ 1 ]+' </td><td>' + d[ 2 ] + '</td><td>' + d[ 3 ] + '</td><td>' + d[ 4 ] + '</td></tr>
<tr><td> '+d[ 5 ]+' </td><td>' + d[ 6 ] + '</td><td>' + d[ 7 ] + '</td><td>' + d[ 8 ] + '</td></tr>'

有没有办法达到预期的输出

标签: rfor-loop

解决方案


这会生成您预期的输出。

asd <- purrr::map_chr(c(1L,5L), ~ {
  paste0("<tr>",
          purrr::map_chr(seq(.x,.x + 3,1), ~ {
            glue::glue("<td>' + d[{.x}] + '</td>")
          }) %>% str_c(collapse = "")
         ,
         "</tr>")
})
asd
[1] "<tr><td>' + d[1] + '</td><td>' + d[2] + '</td><td>' + d[3] + '</td><td>' + d[4] + '</td></tr>"
[2] "<tr><td>' + d[5] + '</td><td>' + d[6] + '</td><td>' + d[7] + '</td><td>' + d[8] + '</td></tr>"

当然可以有基于for循环的解决方案,但我认为如果你使用 R,学习使用 apply/map 函数是值得的。


推荐阅读