#r #latex #kable
#r #Латекс #kable
Вопрос:
Я хотел бы сохранить только «внутренние» строки таблицы latex, созданной kable. Я знаю только громоздкие и уродливые способы сделать это … попытки создания более чистых версий не увенчались успехом. вот один чистый провал:
kable.rewrap <- function( df, newname= "mytable" ) {
kt <- kable( df, "latex", booktabs=T )
notop <- strsplit(kt, "\midrule")[[1]][2]
nosur <- strsplit(notop, "\bottomrule" )[[1]][1] ## fails: doesn't like "\"!
newkt <- paste0("\begin{", newname, "}", nosur, "n\end{",newname,"}n")
## attr(newkt, "format") <- chr "latex" # wrong
newkt
}
print(kable.rewrap( data.frame( x=1:3, y=1:3 ), "mytable" ))
должно привести
begin{mytable}
toprule
x amp; y\
midrule
1 amp; 1\
2 amp; 2\
3 amp; 3\
bottomrule
end{mytable}
очевидно, что мой код latex теперь должен определять среду mytable
. Я также озадачен «bottomrule» в nosur
строке работает, но «\ bottomrule» не удается.
(другой альтернативой является полный отказ от kable и просто работа с фреймом данных, разделяя каждую строку символом и каждый столбец символом amp;.)
совет приветствуется.
Ответ №1:
1) kable.envir
Аргумент добавит mytable
часть, но это все равно приведет к созданию таблиц, которые мы удаляем с помощью gsub
:
kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
gsub(".(begin|end){tabular.*}", "", ., perl = TRUE)
предоставление:
begin{mytable}
toprule
x amp; y\
midrule
1 amp; 1\
2 amp; 2\
3 amp; 3\
bottomrule
end{mytable}
2) Еще одна возможность — определить свою собственную среду mytabular, а затем использовать:
kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
kable_styling(latex_table_env = "mytabular")
что дает:
begin{mytable}
begin{mytabular}{rr}
toprule
x amp; y\
midrule
1 amp; 1\
2 amp; 2\
3 amp; 3\
bottomrule
end{mytabular}
end{mytable}
Добавлено
В (2) вместо определения среды бездействия для замены табличного tex / latex фактически делает ее уже доступной, а именно @empty
.
kable(test_data, "latex", booktabs = TRUE, table.envir = "mytable") %>%
kable_styling(latex_table_env = "@empty")
Примечание
Мы назвали фрейм данных, показанный в вопросе, следующим образом:
test_data <- data.frame(x = 1:3, y = 1:3)
Комментарии:
1. Добавлено улучшение к (2) в разделе Добавлено.