1

我想在 gt R 包创建的表中包含国家标志的图像

library(tibble)
library(gt)

df <- tibble(country = c("Italy","Wales"), 
             flag = c("images/flags/Italy.png","images/flags/Wales.png")
             )

# example with hardcoded country
df %>% 
  gt() %>%
  text_transform(
    locations = cells_body(vars(flag)),
    fn = function(x) {
      country = "Wales"
      local_image(
        filename = paste0("images/flags/",country,".png")
    )
    }
  )

将国家/地区硬编码到此代码中会产生输出 - 但显然总是重复相同的标志,而与国家/地区列的值无关

所以我正在寻找正确的方法来替换“威尔士”,并参考同一行的 vars(country)

TIA

4

1 回答 1

2

对不起,我不明白你的问题,因为你的数据框中似乎已经有了路径?但是,以下如何

BASE.PATH <- "images/flags/"
IMG.TYPE <- ".png"


df <- data.frame(
  country = c("Italy","Wales"))


create.path <- function(row) {
  path <- paste(BASE.PATH, row["country"], IMG.TYPE, sep = "")
  return(path)
}

df$image.path <- apply(df, 1, create.path)


load.country.image <- function(row) {
  my.image <- my.load.logic(row["image.path"])
  return(my.image)
}

df$image <- apply(df, 1, load.country.image)

这会为您动态创建路径并加载图像。您只需要load.country.image根据您的需要进行更改。我的猜测是

load.country.image <- function(row) {
  country.image <- local_image(filename = row["image.path"])
  return(country.image)
}

我希望这有帮助!

PS:你能否澄清一下,如果这不是你要找的?谢谢!

编辑 如果您想使用tibbleand gt,以下内容应该可以在您的计算机上运行,​​就像在我的计算机上一样。

library(tibble)
library(gt)

df <- tibble(country = c("Italy","Wales"), 
             flag.path = c("images/flags/Italy.png","images/flags/Wales.png"))


df %>% 
  gt() %>%
  text_transform(
    locations = cells_body(vars(flag.path)),
    fn = function(flag.path) {
      #  The key is here.
      lapply(flag.path, local_image)
    }
  )

问题的关键是理解text_transformlocations列/行作为一个整体传递给fn. 换句话说,flag.path只是一个向量。

于 2020-05-17T15:59:23.030 回答