r - 在循环中使用 Display() 和 as_image() 将图像添加到 flextable 不起作用
问题描述
我有一个 zip 文件,其中包含 2 种类型的多个图像。1-FrequencyRose 图像 2-EnergyRose 图像。我创建了一个 flextable,然后使用for loop将偶数行替换为图像,将奇数行替换为图像标题。该循环正确显示标题,但它仅多次打印每种类型的最后读取图像,而不是根据循环计数实际打印所有图像。
img.file <- unzip("D:\\Mast_Image Files.zip")
fr_files <- img.file[grepl(paste("FrequencyRose", collapse = "|"), img.file)]
er_files <- img.file[grepl(paste("EnergyRose", collapse = "|"), img.file)]
fr_files 有 3 个图像文件路径,与 er_files click相同
num_masts = length(img.file)
c1 = rep("Freq_rose",num_masts)
c2 = rep("Energy_Rose",num_masts)
df = data.frame(c1,c2)
dfft = flextable(df)
sso=seq(1,num_masts,2)
sse=seq(2,num_masts,2)
for (g in 1:(num_masts/2)){
ff.img = fr_files[g]
ef.img = er_files[g]
dfft2 = dfft %>%
display(
i = sse[g], col_key = "c1", pattern = "{{img}}",
formatters = list( img ~ as_image(c1,
src = ff.img, width = 3, height = 3))) %>%
display(
i = sse[g], col_key = "c2", pattern = "{{img}}",
formatters = list( img ~ as_image(c2,
src = ef.img, width = 3, height = 3))) %>%
display(
i = sso[g], col_key = "c1", pattern = paste("Freq_Rose","mast",g)) %>%
display(
i = sso[g], col_key = "c2", pattern = paste("Energy Rose","mast",g))
}
此循环能够正确生成标题,但唯一的 fr_files[3]、er_files[3] 正在循环对应列的所有偶数行。输出为:最终结果。找不到问题。
解决方案
I can't reproduce your example (I don't have the images).
library(ggplot2)
library(tidyverse)
library(flextable)
# a data example ----
zz <- iris %>%
group_by(Species) %>%
summarise( n = n(), avg = mean(Petal.Length),
img_path = paste0( unique(as.character(Species)), ".png"),
gg = list(ggplot(tibble(Sepal.Length, Petal.Width), aes(Sepal.Length, Petal.Width)) + geom_point() + theme_minimal())
)
zz
# create the png ----
walk2(zz$gg, zz$img_path, function(gg, path){
png(filename = path, width = 300, height = 300)
print(gg)
dev.off()
})
From there you have everything you need and the flextable commands could be:
# create the flextable -----
flextable(zz, col_keys = c("Species", "n", "avg", "plot")) %>%
# here, i is selecting only odd rows
compose(i = ~ seq_along(Species) %% 2 > 0, j = "plot", value = as_paragraph(as_image(img_path, width = 300/72, height = 300/72))) %>%
theme_box() %>%
autofit()
推荐阅读
- google-sheets - 使用 Query 和 Importrange 时的公式解析错误
- go - 是否有可能知道哪些 go 包安装在二进制文件中
- ruby-on-rails - 第一次创建后如何将我的模型配置为只读
- javascript - JavaScript - 查找所有具有类的元素,查找重复项并显示它们
- asp.net-core - 在 asp.net core 3 中渲染 rdl
- python - 如何在 Keras/TensorFlow 中可视化 RNN/LSTM 权重?
- php - Laravel 从 5.6 迁移到 5.8,现在所有 url 链接都不起作用
- c++ - 如何将 glfw 库包含到 C++ 项目中?
- mysql - MYSQL中按时间段链接的事实与时间维度表
- c++ - Is there a way to expand and call a tuple of std::functions?