【问题标题】:use flextable::display() in a function在函数中使用 flextable::display()
【发布时间】:2019-02-27 00:19:15
【问题描述】:

我正在尝试使用函数中的flextable::display() 函数,使用显示中函数的参数。以下是我的功能:

add_footnote <- function(df, col, pattern, symbol){

  tmp <- df
  pat <- paste0(pattern, " {{x}}")

  tmp <- display(tmp, 
                 col_key = col,
                 i = ~ col == pattern, 
                 pattern = pat,
                 formatters = list(x ~ as.character(symbol)),
                 fprops = list(x = fp_text(vertical.align = 'superscript')) ) 
  return(tmp)
}

# Call function
df <- regulartable(head(iris))
add_footnote(df, col = 'Species', pattern = 'setosa', symbol = 'a')

我希望在setosa 出现在Species 列中的任何地方得到一个上标a,但是它给出了以下错误,表明显示函数看不到传递给函数的参数:

eval(as.call(f[[2]]), envir = data) 中的错误:找不到对象“模式”

有谁知道如何从函数中获取参数以被内部display() 函数识别?

【问题讨论】:

  • 我收到错误:could not find function "fp_text"。也许您应该开始一个新会话,然后记录所有库调用?
  • 对不起,fp_text 来自officer

标签: r flextable


【解决方案1】:

函数display 很难使用——这就是我写flextable::compose 的原因。它可以依赖于整洁的 eval 语法。以下 2 个示例应该对您有所帮助:

library(flextable)
library(officer)
library(rlang)

add_footnote_with_rlang <- function(df, col, pattern, symbol){
  form_ <- sprintf("~ %s == '%s'", col, pattern)
  colname <- enquo(col)
  flextable::compose(
    x = df, j = col, i = as.formula(form_), 
    value = as_paragraph(
      as_chunk(!!colname), 
      as_chunk(symbol, props = fp_text(vertical.align = 'superscript')))
    ) 
}
add_footnote <- function(df, col, pattern, symbol){
  form_ <- sprintf("~ %s == '%s'", col, pattern)
  flextable::compose(
    x = df, j = col, i = as.formula(form_), 
    value = as_paragraph(
      as_chunk(symbol, props = fp_text(vertical.align = 'superscript')))
    ) 
}

# Call function
df <- regulartable(head(iris))
# df <- add_footnote(df, col = 'Species', pattern = 'setosa', symbol = 'a')
df <- add_footnote_with_rlang(df, col = 'Species', pattern = 'setosa', symbol = 'a')
df

【讨论】:

  • 太棒了,谢谢大家明天试试看:)
  • 第一个效果很好,谢谢。第二个函数虽然删除了原始列值,但我将只使用第一个:)。
猜你喜欢
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
  • 2020-02-01
  • 2021-12-18
  • 1970-01-01
  • 2022-11-08
  • 2019-06-19
  • 2020-08-15
相关资源
最近更新 更多