我有一个带有文本字段的数据集,我希望使用包datatable
中的函数DT
来显示该数据集。我还希望(1)格式化该文本字段,以便显示换行符并强调某些文本块;和(2)垂直对齐其余字段,以便将它们的值推到顶部。
考虑以下示例:
library(DT)
L <- 10
datatable(
data.frame(
var1 = sapply(1:L, function(x)
paste("<X>",paste0(x,
letters,
LETTERS,
"\n",
collapse=" "))),
var2 = round(rnorm(L),2)
)
)
如您所见,输出忽略\n
。我还想<X>
大胆。我尝试过使用<br>
之类的HTML标记,但似乎没有任何工作,因为var1
中的文字已被转义。取消它(可以通过datatable
选项实现)并不是一个好主意,因为(实际)文本包含特殊字符。我还希望将var2
的值推到最顶层。
如果它有所作为,我想在Shiny网络应用程序中使用输出。
有没有人对如何实现我正在寻找的东西有任何建议?
非常感谢提前。
答案 0 :(得分:1)
要在DT单元格中实现换行符,您需要使用<br/>
代替\ n并使用escape参数转义(它将被读作HTML)。
要更改单元格中值的对齐方式,可以使用datatable函数选项中的columnDefs参数。问题是你只能水平对齐。(左,右和中) 使用rowCallback函数,我可以手动将第二列中的每个值设置为顶部对齐。但这不是一个理想的解决方案。
library(DT)
L <- 10
dataset <- data.frame(
var1 = sapply(1:L, function(x)
paste("<X>",paste0(x,
letters,
LETTERS,
"<br/>",
collapse=" "))),
var2 = round(rnorm(L),2)
)
datatable(dataset, escape = 1,
options = list(
columnDefs = list(list(className = 'dt-center', targets = 2)),
rowCallback=JS(paste0("function(row, dataset) {var value=dataset[2]; if (value!==null) $(this.api().cell(row,2).node()).css({'vertical-align': 'text-top'});}"))
)
)
答案 1 :(得分:1)
要垂直对齐您的列内容,您可以这样做:
T1 <- datatable(dataset)
T1 %>%
formatStyle(c('column_1','column_2'), 'vertical-align'='top') %>%
formatStyle(c('column_1','column_2'), 'text-align' = 'left')