Я хочу использовать вывод RMD HTML для своих проектов R и использую DT для создания динамических таблиц, в которых можно реализовать настраиваемые заголовки (например, классы ячеек, colspan, rowspan), предоставив пользовательский заголовок с функцией withtags
, как в пример из DT документов.
Они использовали функцию withtags
вот так
htmltools::withTags(table(
class = 'display',
thead(
tr(
th(rowspan = 2, "Test1"),
th(rowspan = 2, "Test2"),
th(rowspan = 2, "Test3")
)
)
)
чтобы получить вывод, подобный этому:
<table class="display">
<thead>
<tr>
<th rowspan="2">Test1</th>
<th rowspan="2">Test2</th>
<th rowspan="2">Test3</th>
</tr>
</thead>
</table>
Теперь я хотел создать вышеупомянутую структуру динамически, как это (вы можете запустить это как отдельный RMD)
library(DT)
# sample data
columns_header1 <- c(2,1,1,3)
columns_header2 <- c(1,1,1,1,1,1,1)
classes_header1 <- c("headerlightturquoise small","seperator","seperator","small")
classes_header2 <- c("small","small","small","small","small","small","small")
names_header1 <- c("2 Column Name","One Column","One Column","3 Column Name")
names_header2 <- c("One Column","One Column","One Column","One Column","One Column","One Column","One Column")
header1 <- list("columns" = columns_header1, "classes" = classes_header1, "names" = names_header1)
header2 <- list("columns" = columns_header2, "classes" = classes_header2, "names" = names_header2)
header <- list(header1,header2)
# create the string
tmp_custom_table_header <- "table(class='display', thead("
for(i in seq(1,length(header))) {
tmp_custom_table_header <- paste(tmp_custom_table_header,"tr(")
for(j in seq(1,length(header[[i]]$columns))) {
tmp_custom_table_header <- paste(tmp_custom_table_header,"th(colspan=",header[[i]]$columns[j],", '", header[[i]]$names[j], "',", "class='", header[[i]]$classes[j], "')")
if(j < length(header[[i]]$columns)) {
tmp_custom_table_header <- paste(tmp_custom_table_header,",")
}
}
tmp_custom_table_header <- paste(tmp_custom_table_header,")")
if(i < length(header)) {
tmp_custom_table_header <- paste(tmp_custom_table_header,",")
}
}
tmp_custom_table_header <- paste0(tmp_custom_table_header,"))")
# usage of withTags
custom_table_header <- htmltools::withTags({tmp_custom_table_header})
# test for display
testdata <- mtcars %>%
select(mpg,cyl,disp,hp,drat,wt,qsec)
testdata %>%
DT::datatable(
class = 'stripe row-border order-column',
container = custom_table_header,
escape=FALSE,
colnames = header[[2]]$names,
options=list(sDom = '<"top"><"bottom">'),
rownames = FALSE
)
К сожалению, withTags не принимает мою строку в качестве правильного ввода. Каким был бы предложенный способ
- создать структуру динамически, используя удобный синтаксис и
- правильно проанализируйте его в формате, который я могу использовать с DT.
Спасибо!
Stephan