我正在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))
答案 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))
这里是flextable
中的另一个人:
library(flextable)
data.frame(as.vector(object)) %>%
regulartable() %>% set_header_labels(names(object))