如何在循环中使用 gt::text_transform

How to use gt::text_transform inside a loop

我想在 for 循环内的单元格内容下添加值(以遍历我的 table。考虑这个例子:

library(dplyr)
library(gt)

df <- as.data.frame(matrix(NA, nrow = 3, ncol = 3))
tab <- gt(df)
for (i in 1:3) {
    tab <- tab %>%
        text_transform(locations = cells_body(
            columns = all_of(i),
            rows = all_of(i)
        ), fn = function(x) {
            paste0(x, "<br>", i)
        })
}
tab

现在标签看起来像这样:

这很奇怪,但是在对角线上添加的元素是相同的。我希望它们分别为 1、2 和 3。

我们可以通过避免 for 循环来达到预期的结果:

tab <- gt(df)

tab <- tab %>%
    text_transform(locations = cells_body(
        columns = all_of(1),
        rows = all_of(1)
    ), fn = function(x) {
        paste0(x, "<br>", 1)
    })

tab <- tab %>%
    text_transform(locations = cells_body(
        columns = all_of(2),
        rows = all_of(2)
    ), fn = function(x) {
        paste0(x, "<br>", 2)
    })

tab <- tab %>%
    text_transform(locations = cells_body(
        columns = all_of(3),
        rows = all_of(3)
    ), fn = function(x) {
        paste0(x, "<br>", 3)
    })
tab

但这只适用于非常小的 tables,就像这里的这个。有人知道我哪里搞砸了吗?

非常感谢 Limey 我使用 lapply:

解决了这个问题
library(dplyr)
library(gt)

df <- as.data.frame(matrix(NA, nrow = 3, ncol = 3))
tab <- gt(df)
f <- function(i) {
    tab <<- tab %>%
        text_transform(locations = cells_body(
            columns = all_of(i),
            rows = all_of(i)
        ), fn = function(x) {
            paste0(x, "<br>", i)
        })
}
tab

lapply(1:3, f)
tab