我将函数嵌套在函数中,以便能够在 Flexdashboard 中轻松创建内容,同时生成 Markdown 位。我有一个非常抽象的例子,但它确实复制了问题。
如果您提供有关如何完成这项工作的任何提示,我将非常感激。问题来了:
1。我有三个功能;两个带有一些 markdown,一个带有 html 小部件 - 在本例中是一个可反应的。
{r results = 'asis'}
f1 <- function(x) {
cat("example text before", x)
}
f2 <- function(x) {
reactable::reactable(mtcars)
}
f3 <- function(x) {
cat("example text after", x)
}
2。在 R Studio 控制台中调用时,我得到两个输出:一个来自 f1 和 f3 的文本,以及一个来自 f2 的 html 小部件 - 这可以正常工作。
{r results = 'asis'}
f1("test")
f2("test")
f3("test")
3.现在相同的函数包含在另一个函数中,我期望与上面单独调用它们时相同的输出,但它只从 f1 和 f3v 生成一个文本 - 来自 F3 的 HTML 小部件丢失
{r results = 'asis'}
f <- function(x) {
f1(x)
f2(x)
f3(x)
}
f("test")
我可能错过了一些明显的东西......感谢您的帮助!
我评论说我认为你只需要打印结果,但这是错误的。我不确定到底为什么...
但是这里有一个可行的方法:将所有输出放入一个
tagList
对象中。例如,在代码块中使用此代码:
```{r}
f1 <- function(x) {
paste("example text before", x)
}
f2 <- function(x) {
reactable::reactable(mtcars)
}
f3 <- function(x) {
paste("example text after", x)
}
f <- function(x) {
htmltools::tagList(f1(x),
f2(x),
f3(x))
}
f("test")
```
请注意,我没有使用
asis
,也没有使用 cat()
:所有输出都需要进入列表中的条目。