Использование цикла for с knitr :: kable и kableExtra :: add_header_above - PullRequest
0 голосов
/ 26 февраля 2019

Я использую R версии 3.5.2 .

Я бы хотел оценить строку в kable функции , но у меня возникли некоторые проблемы.Обычно я могу передать строку через цикл for с помощью функции get, но в функции kableExtra::add_header_above я получаю следующую ошибку:

Error: unexpected '=' in:"print(kable(df4,"html", col.names = c("zero","one")) %>% add_header_above(c(get("string") ="

Я испробовал несколько методов, таких как создание строкивне функции kable и ее вызова, используя разрывы страниц и операторы печати в цикле вязания, а также пробуя функцию eval.Я также добавил результат = "asis", как предложено здесь

Вот воспроизводимый пример:

```{r  results="asis"}    
library("knitr")
    library("kableExtra")

    df1 <- mtcars %>% dplyr::select(am,vs)

    df1a <- df1 %>% mutate(type = "A")
    df1b <- df1 %>% mutate(type = "B")
    df1c <- df1 %>% mutate(type = "C")

    df2 <- rbind(df1a,df1b,df1c)

    vector <- as.vector(unique(df2$type))

    for (variable in vector) {

      df3 <- df2 %>% filter(type == (variable))

      df4 <- table(df3$am,df3$vs)

    print(kable(df4,"html", col.names = c("zero","one")) %>%
      add_header_above(c(get("string") = 3)))

    }
```

В идеале, я хотел бы, чтобы заголовок таблицы былиметь имя строки из столбца type.Ниже приведен пример того, как я хочу, чтобы это выглядело:

print(kable(df4,"html", col.names = c("zero","one")) %>%
  add_header_above(c("A" = 3)))

Я понимаю, что функция knitr должна обрабатываться иначе, чем обычная R при использовании циклов, как указано в this решение, но я все еще пытаюсь получить строку для правильной оценки.Возможно, потому что функция требует ввода vecotr, она не оценивает его как строку?

1 Ответ

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

Вы должны определить свой заголовок как вектор.Имя заголовка должно быть именами вектора, а значение вектора - количеством столбцов, которые будет использовать заголовок.Цикл в коде должен выглядеть следующим образом:

for (variable in vector) {
  df3 <- df2 %>% filter(type == (variable))
  df4 <- table(df3$am,df3$vs)
  header_temp = 3
  names(header_temp) = get("variable")
  print(kable(df4,"html", col.names = c("zero","one")) %>%
    add_header_above(header_temp))
}

Итак, сначала я определяю количество столбцов заголовка в переменной header_temp, а затем присваиваю ему имя.

...