HTML Widget 未在嵌套函数中显示

问题描述 投票:0回答:1

我将函数嵌套在函数中,以便能够在 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")

我可能错过了一些明显的东西......感谢您的帮助!

r htmlwidgets
1个回答
0
投票

我评论说我认为你只需要打印结果,但这是错误的。我不确定到底为什么...

但是这里有一个可行的方法:将所有输出放入一个

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()
:所有输出都需要进入列表中的条目。

© www.soinside.com 2019 - 2024. All rights reserved.