Rmarkdown - 打印对象列表而不显示那些讨厌的[[indices]]

时间:2018-04-11 08:25:57

标签: r-markdown knitr htmltools summarytools

这将有点罗嗦,因为如果没有适当的背景,我无法看到我如何提出我的问题。

在我的summarytools包中,没有过多细节,我使用by()的包装函数,即print.summarytools来处理view()个对象。此view()函数可以标识通过bylapply()创建的对象,并将其组件发送到包print(),并提供与标题和脚注相关的适当参数,等等(第一个元素不会接收与第二个元素相同的参数,也不会接收最后一个元素。)

链接到软件包开发页面:

该软件包提供了两种呈现内容的方式:通过pander进行rmarkdown,使用带有RStudio htmltools的HTML。就rmarkdown / pander而言,我取得了令人满意的结果。关于rmarkdown文档中的HTML呈现也是如此。

例如:

library(devtools)
install_github("dcomtois/summarytools", ref = "dev-current")
library(summarytools)

# call the descr() function through by() to get stats by gender
groupstats <- by(data = exams, INDICES = exams$gender, FUN = descr)

# Use the view() function to neatly display results
view(groupstats, method = 'render')

此示例以Gist on github提供。

编织后的结果:

rendered html content

我尝试了几件事,没有一件令人满意。由于summarytool的打印方法返回的对象属于shinytag类,所以(可能)理想的解决方案是将所有这些对象合并到一个类shinytag的列表中,但是我可以将它们组合在一起。我不知道用htmltools做任何事情。在我看来,挑选列表元素是一个麻烦的方法,因为那里有很多列表嵌套。

我尝试lapply(groupstats, print, method = 'render'),但后来没有[[n]],我$names出现了。

所以我的问题是:我怎样才能摆脱输出中的[[n]]

包源代码 有关包源代码的相关性查询,请参阅summarytool's dev-current branch R/view.R文件,第78行-116行。

1 个答案:

答案 0 :(得分:1)

如果您有list()项将以HTML格式打印,则可以使用htmltools::tagList()将它们放在一起,并且不会显示列表的索引。例如,

library(htmltools)
thelist <- list(a, b)

可能会与示例中的[1][2]一起显示,但

tagList(thelist)

tagList(a, b)

只会显示两个项目。