R-knitr :: kable(“ html)-名称中的col.names(列表)

时间:2018-11-04 17:50:44

标签: r knitr blogdown kable

我正在RStudio中撰写博客文章。一方面,大块输出是带有命名数字向量的命名列表,其结构如下:

object <- list("Name One" = c("A" = 1, "B" = 1), "Name two" = c("C" = 2, "D" = 2))

我想做的是使用:

object %>% 
    knitr::kable("html", col.names = X)

将输出呈现在漂亮的HTML表中。在此示例中,呈现的col.names应该是"Name One""Name Two"

当然,以col.names = names(object)的方式做的事是完美的!

这是我收到的错误消息

Error in dimnames(x) <- dn : length of 'dimnames' [2] not equal to array extent

我知道每个列标题都被呈现为:

<tr>
  <th style="text-align:left;">   </th>
  <th style="text-align:right;"> x </th>
</tr>

请注意第一个单元格为空。

每个命名数字列都呈现为:

<tr>
  <td style="text-align:left;"> A </td>
  <td style="text-align:right;"> 1 </td>
</tr>
<tr>
  <td style="text-align:left;"> B </td>
  <td style="text-align:right;"> 1 </td>
</tr>

我尝试使用向量c("Name One","name Two"),向量c("Name One","n","Name Two","n")以及各种seq()rep()的组合,但没有成功。

一个更现实的例子在这里 期待任何整洁的提示。

编辑:我刚刚添加了object %>%,以使目标更加明确。为了重现这一点,您需要在R Markdown / Notebook中运行以下块:

object <- list("Name One" = c("A" = 1, "B" = 1), "Name two" = c("C" = 2, "D" = 2))
# cf. names(object)
object %>% 
    knitr::kable("html", col.names = names(object))

2 个答案:

答案 0 :(得分:1)

所以我的猜测是您想要一张像这样的桌子(如果不想这样说的话)

<table>
 <thead>
  <tr>
   <th style="text-align:left;"> Name.one </th>
   <th style="text-align:right;"> Name.two </th>
  </tr>
 </thead>
<tbody>
  <tr>
   <td style="text-align:left;"> A </td>
   <td style="text-align:right;"> 1 </td>
  </tr>
  <tr>
   <td style="text-align:left;"> B </td>
   <td style="text-align:right;"> 2 </td>
  </tr>
</tbody>
</table>

为此,如果您采用data.frame(或tibble)格式的文件,可以通过以下方式生成它:

data.frame("Name one"=c("A","B"), "Name two"=c(1, 2)) %>% kable(format="html")

答案 1 :(得分:0)

我喜欢上面的Emi解决方案,这里还有另外两个可以很好地呈现在网页上的选项,包括我最喜欢的DT包中的一个(在https://rstudio.github.io/DT/上有很多选项-很多上的空白):

library(DT)
data.frame(as.vector(object)) %>% 
    datatable(options=list(dom='t'),colnames=names(object))

enter image description here

这里是flextable中的另一个人:

library(flextable)
data.frame(as.vector(object)) %>% 
    regulartable() %>% set_header_labels(names(object))

enter image description here