используйте flextable :: display () в функции - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь использовать функцию 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')

Я надеюсь получить верхний индекс a везде, где в столбце Species появляется setosa, однако он выдает следующую ошибку, указывающую, что функция дисплея может 't увидеть аргументы, передаваемые в функцию:

Ошибка в eval (as.call (f [[2]]), envir = data): объект 'pattern' не найден

Кто-нибудь знает, как получить аргументы функции, которые будут распознаны внутренней функцией display()?

1 Ответ

0 голосов
/ 27 февраля 2019

Функция 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
...