R语言 向列表列表中的弹性表添加标题

jhkqcmku  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(175)

我以为这会是超级容易的,但我还是做错了一些事情。

示例数据

我有如下示例数据(这是弹性表列表的列表):

library(data.table)
library(flextable)
datA <- fread("anyvar somevar
               2  4
               2  3
               2  5")

dat_list <- list("one" = list("datA" = datA, "datB" = 2*datA),"two" = list("datC" = 3*datA, "datD" = 4*datA), "three" = list("datE" = 5*datA, "datF" = 6*datA))

for (i in seq_along(dat_list) ) {
  for (j in seq_along( dat_list[[i]] ) ) {
    dat_list[[i]][[j]] <- flextable( dat_list[[i]][[j]] )
  }
}

vector_of_lists <- c("one", "two", "three")

尝试

我只想给每个灵活表onetwothree添加标题。

for (i in seq_along(dat_list) ) {
  for (j in seq_along( dat_list[[i]] ) ) {
    dat_list[[i]][[j]] <- add_header_row(dat_list[[i]][[j]],  top = TRUE, values = paste0("Table: ", i, " Header of table", vector_of_lists[i] ))
  }
}

我得到的错误是:

Error in inverse.rle(structure(list(lengths = colwidths, values = values),  : 
  invalid 'rle' structure

所需输出:

类似于下面的内容,但随后添加:Table 1: Header of table one

t1rydlwq

t1rydlwq1#

将代码从add_header_row()更改为set_caption()是有效的

for (i in seq_along(dat_list) ) {
  for (j in seq_along( dat_list[[i]] ) ) {
    dat_list[[i]][[j]] <- set_caption(dat_list[[i]][[j]], caption = paste0("Table: ", i, " Header of table", vector_of_lists[i] ))
  }
}

dat_list[[3L]][[1L]]

问题是add_header_rows()通常希望用户包含一个命名字符向量,该向量与您希望为其提供附加标题信息的列名相匹配。为了至少使您最初的方法不出错,您可以指定colwidths = 2,其中2是表的列数。

for (i in seq_along(dat_list) ) {
   for (j in seq_along( dat_list[[i]] ) ) {
     dat_list[[i]][[j]] <- add_header_row(dat_list[[i]][[j]], top = TRUE,colwidths = 2,values = paste0("Table: ",i," Header of table",vector_of_lists[i] ))
   }
 }

dat_list[[3L]][[1L]]

样式略有不同,因为现在我们有两行标题,而不是一个标题和一个标题。

相关问题